学习网上写的存储过程和函数,不知道该如何调用了,请各位高手帮忙看一下,需要用到数组.
CREATE OR REPLACE PACKAGE ABC
as
type VarTableType is table of varchar2(20000);
function str2varList2( p_string in varchar2 ) return VarTableType;
??????????????????????????
不知道该用哪种存储过程传入数值,然后调用str2varlist2函数
procedure straddtable(addstr in varchar2);
procedure straddtable2(addstr2 in vartabletype);
????????????????????????????????
END ABC;
--------------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY ABC
AS
function str2varList2( p_string in varchar2 ) return VarTableType
as
v_str long default p_string || '$';
v_n varchar2(20000);
v_data VarTableType := VarTableType();
begin
loop
v_n :=instr( v_str, '$' );
exit when (nvl(v_n,0) = 0);
v_data.extend;
v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));
v_str := substr( v_str, v_n+1 );
end loop;
return v_data;
end ;
???????存储过程不知道如何写,先调用str2varlist2函数,然后如何将数据提取出来???????
procedure straddtable(addstr in varchar2)
as
s1 varchar2(20000):='';
begin
end straddtable;
procedure straddtable2(addstr2 in vartabletype)
as
begin
end straddtable2;
END ABC;
------------------------------------------------------------------
在SQLPLUS中测试STR2VARLIST2
传入数值如下
SQL> var str varchar2(4000);
SQL> /
函数已创建。
SQL> exec :str:='2008,01,00,20080112,5,收款,101,借,10000$2008,01,00,20080112,5,收款,20101,贷,2000$20
08,01,00,20080112,5,收款,20102,贷,2000$2008,01,00,20080112,5,收款,20103,贷,3000$2008,01,00,20080112,
5,收款,20104,贷,4000'
PL/SQL 过程已成功完成。
SQL> select str2varlist2(:str) from dual;
STR2VARLIST2(:STR)
--------------------------------------------------------------------------------
VARTABLETYPE('2008,01,00,20080112,5,收款,101,借,10000', '2008,01,00,20080112,5,
收款,20101,贷,2000', '2008,01,00,20080112,5,收款,20102,贷,2000', '2008,01,00,200
80112,5,收款,20103,贷,3000', '2008,01,00,20080112,5,收款,20104,贷,4000')
----------------------------------------------------------------------------------------------------
在这里每一组数据都是一条记录,我在存储过程中如何将这5条记录取出,
然后再将数据按逗号分解出来.再运行SQL语句插入到表中.
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','101','借',10000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20101','借',1000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20102','借',2000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20103','借',3000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20104','借',4000);
as
type VarTableType is table of varchar2(20000);
function str2varList2( p_string in varchar2 ) return VarTableType;
??????????????????????????
不知道该用哪种存储过程传入数值,然后调用str2varlist2函数
procedure straddtable(addstr in varchar2);
procedure straddtable2(addstr2 in vartabletype);
????????????????????????????????
END ABC;
--------------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY ABC
AS
function str2varList2( p_string in varchar2 ) return VarTableType
as
v_str long default p_string || '$';
v_n varchar2(20000);
v_data VarTableType := VarTableType();
begin
loop
v_n :=instr( v_str, '$' );
exit when (nvl(v_n,0) = 0);
v_data.extend;
v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));
v_str := substr( v_str, v_n+1 );
end loop;
return v_data;
end ;
???????存储过程不知道如何写,先调用str2varlist2函数,然后如何将数据提取出来???????
procedure straddtable(addstr in varchar2)
as
s1 varchar2(20000):='';
begin
end straddtable;
procedure straddtable2(addstr2 in vartabletype)
as
begin
end straddtable2;
END ABC;
------------------------------------------------------------------
在SQLPLUS中测试STR2VARLIST2
传入数值如下
SQL> var str varchar2(4000);
SQL> /
函数已创建。
SQL> exec :str:='2008,01,00,20080112,5,收款,101,借,10000$2008,01,00,20080112,5,收款,20101,贷,2000$20
08,01,00,20080112,5,收款,20102,贷,2000$2008,01,00,20080112,5,收款,20103,贷,3000$2008,01,00,20080112,
5,收款,20104,贷,4000'
PL/SQL 过程已成功完成。
SQL> select str2varlist2(:str) from dual;
STR2VARLIST2(:STR)
--------------------------------------------------------------------------------
VARTABLETYPE('2008,01,00,20080112,5,收款,101,借,10000', '2008,01,00,20080112,5,
收款,20101,贷,2000', '2008,01,00,20080112,5,收款,20102,贷,2000', '2008,01,00,200
80112,5,收款,20103,贷,3000', '2008,01,00,20080112,5,收款,20104,贷,4000')
----------------------------------------------------------------------------------------------------
在这里每一组数据都是一条记录,我在存储过程中如何将这5条记录取出,
然后再将数据按逗号分解出来.再运行SQL语句插入到表中.
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','101','借',10000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20101','借',1000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20102','借',2000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20103','借',3000);
INSERT INTO A(KJND,KJQJ,PZZ,PZRQ,FJZS,ZY,KM,FX,JE)
VALUES ('2008','01','00','20080112',5,'收款','20104','借',4000);
...全文
相关推荐
Mybatis调用PostgreSQL存储过程实现数组入参传递
主要介绍了mybatis调用postgresql自定义函数传递数组参数的解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
oracle函数调用存储过程
oracle函数调用存储过程.doc
Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目).zip
Oracle学习开发常用的SQL和存储过程学习(内含SQL面试题目和存储过程,函数面试题目,里面有丰富的SQL基本语法学习和SQL练习题以及存储过程非常适合新手和找工作的人群
Mysql存储过程和函数区别介绍
主要介绍了Mysql存储过程和函数的区别,需要的朋友可以参考下
Mysql通过存储过程分割字符串为数组
分割字符串为数组需要用到 三个mysql 的函数 : REVERSE(str) 返回颠倒字符顺序的字符串str。 SUBSTRING_INDEX(str,delim,count) 返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。 REPLACE(str,from_str,to_str) 返回字符串str,其字符串from_str的所有出现由字符串to_str代替。 通过三个函数的组合使用做到分割字符串为数组的功能。 首先写两个函数 1


