全部代码如下: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类型吗?
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类型吗?
调用上面定义的存储过程,将查询到的值放入p_retcur,下面才好fetch到变量中。还有ref游标只能返回 xxx%rowtype类型吗,不是,游标跟%ROWTYPE没关系,你这里是因为要返回这个表的所有列,所以才用这个。你可以 open cur_aa for select test.a,test.b from tbl;
我这样做过,结果报编译错误
而游标的类型必须是 sys_refcursor.
打开一个游标,其实质是将一个结果集打开,并将指针指向这个结果集的第一条记录。