全部代码如下:Create or replace package strong_type
is
type return_cur is ref cursor return test%rowtype;
procedure child(p_re_rec out return_cur);
procedure parent(p_num integer);
end strong_type;
/
CREATE OR REPLACE PACKAGE BODY strong_type IS PROCEDURE child(p_re_rec out return_cur) IS
BEGIN
OPEN p_re_rec FOR 
SELECT * FROM test; 
END child;  PROCEDURE parent (p_num INTEGER) IS 
p_retcur return_cur;
at_rec test%ROWTYPE;
BEGIN
child(p_retcur);
FOR i IN 1 .. p_num
LOOP
FETCH p_retcur
INTO at_rec;
dbms_output.put_line(at_rec.id ||' - ' || at_rec.hehe);
END LOOP; 
END parent;  
END strong_type;
/ 请问这句代码什么意思:   child(p_retcur);
还有ref游标只能返回 xxx%rowtype类型吗?

解决方案 »

  1.   

    child(p_retcur); 
    调用上面定义的存储过程,将查询到的值放入p_retcur,下面才好fetch到变量中。还有ref游标只能返回 xxx%rowtype类型吗,不是,游标跟%ROWTYPE没关系,你这里是因为要返回这个表的所有列,所以才用这个。你可以 open cur_aa for select test.a,test.b from tbl;
      

  2.   

    谢谢,能不能举个例子说明一下返回其他类型,如test.id%type。
    我这样做过,结果报编译错误
      

  3.   

    var_id test.id%type 的意思是,这个var_id的变量类型跟表test的id列的类型一致,也就是说,如果你的id列字段类型是varchar2,那么这个var_id的类型也是varchar2,如果id列字段类型是number,那么这个var_id的类型也是number。
    而游标的类型必须是 sys_refcursor.
    打开一个游标,其实质是将一个结果集打开,并将指针指向这个结果集的第一条记录。