目标:
   实现一个函数返回一个TABLE或者指向它的游标
   如  我有一个字符串str:=',a,b,c,'   通过调用我定义的函数My_Function(str),得到如下结果:
       no     name
       1      a
       2      b
       3      c
请问高手该怎么实现啊???我试过在函数里面定义个临时表,然后将str分割再insert这个临时表,最后返回一个指向他的游标,但好象行不通。

解决方案 »

  1.   

    临时表可以!
    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>
      

  2.   

    to:bzszp(SongZip)
    能不能将创建临时表跟存储过程封装成一个FUNCTION,然后让这个函数返回这个临时表啊?
    还有一个问题就是,当第一次调用这个过程exec p_demo('1,2,3'),然后再次调用这个过程exec p_demo
    ('a,b,c'),临时表里就会有6条记录拉,这不是我想要的
      

  3.   

    你的最终结果只不过是想得到一组记录而已,返回TABLE类型的数据即可实现(如同数组),自定义一个TABLE类型,关于TABLE类型用法查相关资料。
      

  4.   

    必须commit,commit以后,临时表数据自动清空
    或者在存储过程里面 先加上delete from tb_temp;语句即可。直接访问临时表即可。