PL/SQL:将显式光标转换为REF光标



我可以将显式光标转换为ref光标吗?我在想:

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;

,但是我正在重构一些旧代码,我想只是为了清晰而保留显式光标的定义。

如我的评论中所述,在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;
/

您会在这里看到最后一次使用ref_cursorSELECT语句。就像您不想使用常规方式一样,我使用另一种方式。