0

我想做这样的事情

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;

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

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

4

1 回答 1

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。

于 2012-12-07T12:01:13.477 回答