昨天我在制作过程中遇到了一个奇怪的错误.
声明执行失败
if v_cursor%isopen then
close v_cursor; -- here was an error
end if;
经过一番挖掘,我发现问题出现在打开这个光标的子程序中.我通过在子程序中添加输出参数sys_refcursor来修复bug.为了澄清情况,请考虑以下测试代码:
procedure nested_test(test number,
p_cur out sys_refcursor)
is
procedure nested_procedure_fail is
begin
open p_cur for
select 1, 2, 3, 4
from dual
where 1 = 0;
end;
procedure nested_procedure_success(p_cur out sys_refcursor) is
begin
open p_cur for
select 1, 2, 3, 4
from dual
where 1 = 0;
end;
begin
if test = 1 then
nested_procedure_fail;
else
if test = 2 then
nested_procedure_success(p_cur => p_cur);
else
open p_cur for
select 6, 7, 8, 9
from dual
where 1 &