学习网上写的存储过程和函数,不知道该如何调用了,请各位高手帮忙看一下,需要用到数组.

whxxr 2008-03-20 09:54:09
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);



...全文
56 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CathySun118 2008-03-24
  • 打赏
  • 举报
回复
STR2VARLIST2这个函数修改一下,把记录分割的逗号用分号替代,然后可以用分号分解记录,其他的就容易了

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧