declare
c sys_refcursor;
begin
--p(c) 是一个存储过程返回了多条记录
p(c);
for v in c loop
dbms_output.put_line(v.ename);
end loop;
end;
--报第5行出错,说 c 未定义
大家给看看,急啊!

解决方案 »

  1.   

    sys_refcursor不能使用for in 方式来遍历
    需要采用
    loop
    fetch .. into ...;
    exit when ...;
    end loop;
      

  2.   

    create procedure p (c out sys_refcursor)
    as
    begin
    open c for
     select * from emp2;
    end;
      

  3.   

    loop
    fetch .. into ...;
    exit when ...;
    end loop;
    如果用这种方法我怎么知道遍历到最后一条了呢?
      

  4.   

    用SQL%NOTFOUND 做退出的条件
      

  5.   

    谢谢大家 问题已经解决了
    从 sys_refcursor 中取得结果集只能是loop 配合(c%notfound)
    另外两个循环(while , for) 都不行,也不知道ORACLE为什么这么设计!!!