你需要定义一个包的,用ref cursor

解决方案 »

  1.   

    先建立一个包,在包中建立一个记录集类型,再在该包中建立一个存储过程,用该记录集类型定义存储过程参数.
    创建包
    CREATE OR REPLACE PACKAGE pack_test
    AS
       TYPE mycur IS REF CURSOR;
    END pack_test;创建存储
    CREATE OR REPLACE PROCEDURE p_test
    (
       p_rc OUT pack_test.mycur
    ) ISBEGIN
         OPEN p_rc FOR
              SELECT  *
                  FROM c_well;END p_test;
      

  2.   

    谢谢楼上,再请教高手,我可以用类似tname%type,我也不记得怎么写了。反正就是想问,是否可以订一个变量,这个变量就是一个表类型。比如表t_a,我定义一个变量v,它就是表t_a的多条记录的一个结果集,可以吗?
      

  3.   

    SQL>create or replace type mytabletype as table of number;
    /
    SQL> create or replace function testrerecordnotabname (tableid in number)
     2  return mytabletype
     3  as
     4    l_data mytabletype :=mytabletype();
     5  begin
     6    for i in (select * from a where id>=tableid)  loop
     7      l_data.extend;
     8      l_data(l_data.count) := myobjectype(i.id,i.doctime,i.name);
     9      exit when i.id = 62;
    10    end loop;  
    11    return l_data;     
    12  end;   
    13  /
      

  4.   

    liuyi8903(juventus) 解释一下
     7      l_data.extend;
     8      l_data(l_data.count) := myobjectype(i.id,i.doctime,i.name);
    这2句啊。
      

  5.   

    declare 
    type a_type is table of number; 
    -- type a_type is array(10) of number; 
    -- 下面一种定义方式则指定了该数组的最大元素个数 
    a a_type := a_type(); -- 定义并初始化一个数组变量 
    begin 
    a.extend(3); -- 数组扩展到3个元素 
    a(1) := 1;  --赋值
    a(2) := 10; 
    a(3) := 100; 
    end;
      

  6.   

    7      l_data.extend;                --就是扩展
     8      l_data(l_data.count) := myobjectype(i.id,i.doctime,i.name); --赋值