Oracle 您可以打开一个游标并从声明块中定义的游标返回它吗?

Oracle 您可以打开一个游标并从声明块中定义的游标返回它吗?,oracle,cursor,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;

我想做这样的事情

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;
然后,在您的包中,只需从使用光标的视图中进行选择。i、 e.代替

for r_row in theCursor

对于refcursor

open myCursor for select * from refCursor;

这样,您就不必为这一个案例重写视图SQL。

当我写这个问题时,所以告诉我我的问题不好,可能会被关闭,因此,在过去20分钟内,它只被查看了2次,我真的不明白为什么这个问题不好,我想得到关于为什么会发生这种情况的反馈?如何改进?您不仅可以删除光标并始终使用该函数,还可以删除该函数并始终使用光标。为什么你需要在一个单独的函数中使用它?@Ben希望能够在我的Java web应用程序中使用它,并在其他软件包中使用它。
open myCursor for select * from refCursor;