我可以将显式游标转换为引用游标吗?我想的是:
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;
但我正在重构一些旧代码,我希望保留显式游标定义只是为了清晰起见。
答案 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
。它就像你不想使用通常的方式,我用另一种方式。