我想做这样的事情
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>
我知道,我可以删除全局光标并始终使用该功能,但我仍然想知道这是否可行。感谢。
答案 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。