PL / SQL:将显式游标转换为引用游标?

时间:2017-09-06 12:57:01

标签: oracle plsql

我可以将显式游标转换为引用游标吗?我想的是:

declare
  cursor c is
  select x from tab;

  rc sys_refcursor;

begin
  open c;
  rc:=c;
  close c;
end;
/

我想使用ref coursor作为过程的输入参数。

我知道我总能这样做:

OPEN rc FOR select x from tab;

但我正在重构一些旧代码,我希望保留显式游标定义只是为了清晰起见。

1 个答案:

答案 0 :(得分:1)

正如我的评论中所提到的,在Oracle 11g之前,不允许为另一个游标打开sys_refcursor。当您尝试执行需要使用sys_refcursor的操作时,一旦方式如下所示:

创建一个类型

CREATE TYPE va IS TABLE OF NUMBER;
/

块:

DECLARE
   CURSOR c
   IS
      SELECT employee_id FROM employee;

   rc    SYS_REFCURSOR;
   var   va;
BEGIN
   OPEN c;

   FETCH c BULK COLLECT INTO var;

   CLOSE c;

   OPEN rc FOR SELECT COLUMN_VALUE FROM TABLE (var);
END;
/

你会在这里看到最后我再次使用SELECT语句ref_cursor。它就像你不想使用通常的方式,我用另一种方式。