目标:
实现一个函数返回一个TABLE或者指向它的游标
如 我有一个字符串str:=',a,b,c,' 通过调用我定义的函数My_Function(str),得到如下结果:
no name
1 a
2 b
3 c
请问高手该怎么实现啊???我试过在函数里面定义个临时表,然后将str分割再insert这个临时表,最后返回一个指向他的游标,但好象行不通。
实现一个函数返回一个TABLE或者指向它的游标
如 我有一个字符串str:=',a,b,c,' 通过调用我定义的函数My_Function(str),得到如下结果:
no name
1 a
2 b
3 c
请问高手该怎么实现啊???我试过在函数里面定义个临时表,然后将str分割再insert这个临时表,最后返回一个指向他的游标,但好象行不通。
SQL> CREATE GLOBAL TEMPORARY TABLE tb_temp (
2 COL1 number,
3 COL2 varchar2(10)
4 ) ON COMMIT DELETE ROWS ;表已创建。已用时间: 00: 00: 00.70
SQL> select * from tb_temp;未选定行已用时间: 00: 00: 00.10
SQL> create or replace procedure p_demo(v_str varchar2)
2 as
3 str varchar2(200);
4 i number;
5 begin
6 str:=v_str;
7 i:=1;
8 while instr(str,',')>0 loop
9 insert into tb_temp values(i,substr(str,1,instr(str,',')-1))
10 str:=substr(str,instr(str,',')+1);
11 i:=i+1;
12 end loop;
13 insert into tb_temp values(i,str);
14 end p_demo;
15 /过程已创建。已用时间: 00: 00: 00.90
SQL> exec p_demo('a,b,c');PL/SQL 过程已成功完成。已用时间: 00: 00: 00.80
SQL> select * from tb_temp; COL1 COL2
---------- ----------
1 a
2 b
3 c已用时间: 00: 00: 00.30
SQL> commit;提交完成。已用时间: 00: 00: 00.30
SQL> select * from tb_temp;未选定行已用时间: 00: 00: 00.20
SQL> exec p_demo('jasdf,wefwe,ergawer,rter,af');PL/SQL 过程已成功完成。已用时间: 00: 00: 00.30
SQL> select * from tb_temp; COL1 COL2
---------- ----------
1 jasdf
2 wefwe
3 ergawer
4 rter
5 af已用时间: 00: 00: 00.31
SQL>
能不能将创建临时表跟存储过程封装成一个FUNCTION,然后让这个函数返回这个临时表啊?
还有一个问题就是,当第一次调用这个过程exec p_demo('1,2,3'),然后再次调用这个过程exec p_demo
('a,b,c'),临时表里就会有6条记录拉,这不是我想要的
或者在存储过程里面 先加上delete from tb_temp;语句即可。直接访问临时表即可。