我想做这样的事情
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。