从函数返回时,我无法从 PL/SQL 中的打开的 ref_cursor 中获取它。当我将完全相同的 fetch 语句放在函数体中代替 return 语句时,它就可以正常工作了。
function GetBound(p_lat in number, p_long in number) return ref_cursor
IS
v_rc_ref_cursor sys_refcursor;
BEGIN
open v_rc_ref_cursor for select * from state_bound;
return v_rc_ref_cursor;
END;
现在,如果我从匿名 plsql 块中调用它,我会收到错误“ORA-01001:无效游标”
DECLARE
v_rc_ref_cursor sys_refcursor;
v1 number(38);
v2 varchar2(50);
v3 number(38);
v4 varchar2(50);
BEGIN
v_rc_ref_cursor := GetBound(122.0928,-18.6974);
fetch v_rc_ref_cursor into v1, v2, v3, v4;
close v_rc_ref_cursor;
DBMS_OUTPUT.PUT_LINE(v1 || v2 || v3 || v4);
END;
但是,如果我将匿名块放入实际函数中,则一切正常。见下文:
function GetBound(p_lat in number, p_long in number) return ref_cursor
IS
v_rc_ref_cursor sys_refcursor;
v1 number(38);
v2 varchar2(50);
v3 number(38);
v4 varchar2(50);
BEGIN
open v_rc_ref_cursor for select * from state_bound;
-- return v_rc_ref_cursor;
fetch v_rc_ref_cursor into v1, v2, v3, v4;
close v_rc_ref_cursor;
DBMS_OUTPUT.PUT_LINE(v1 || v2 || v3 || v4);
END;
我已经阅读并找到了一些人们在做我正在做的事情的例子,所以据我所知,这应该有效。例如。https://community.oracle.com/thread/888365
有人可以帮我弄清楚我在这里做错了什么吗?