你能打开游标并从声明块中定义的游标返回吗?

时间:2012-12-07 00:34:44

标签: oracle cursor

我想做这样的事情

CREATE OR REPLACE FUNCTION return_cursor RETURN SYS_REFCURSOR IS
        CURSOR theCursor IS
            SELECT 1
            FROM dual;
        myCursor SYS_REFCURSOR;

    BEGIN
        OPEN myCursor for theCursor;
        RETURN myCursor;
END return_cursor;

有没有办法做到这一点?我想要的原因是因为我在包中的全局范围内定义了一些游标,并且不想为函数调用重新编写它们。 / p>

我知道,我可以删除全局光标并始终使用该功能,但我仍然想知道这是否可行。感谢。

1 个答案:

答案 0 :(得分:0)

pl / sql游标和refcursor是不可互换的,所以不能你不能直接做那样的东西。

一种选择是使用视图,即

create view theCursor as select 1 from dual;

然后在你的包中只需从使用光标的视图中选择。即代替

for r_row in theCursor

for r_row in (select * from theCursor)

和refcursor

open myCursor for select * from refCursor;

这样你不必为这一个案例重写视图SQL。