是否可以打开游标并从声明块定义的游标返回它



我想做这样的事情

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;

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

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

pl

/sql 游标和 refcursor 是不可互换的,所以不,你不能像那样直接做你想做的事。

一种选择是改用视图,即

create view theCursor as select 1 from dual;

然后在您的包中,只需从使用光标的视图中选择即可。

for r_row in theCursor

for r_row in (select * from theCursor)

和对于参考

open myCursor for select * from refCursor;

这样,您就不必为这种情况重写视图 SQL。

最新更新