我有一个带有两个输入、两个输出参数和 5 个 sys_refcursors 的存储过程。我有一个成功的 IF/ELSE,我通过调用不同的存储过程打开了这些游标,但现在需要第三个选项,即另一个存储过程调用。第三个选项与第二个选项几乎相同,但有一个区别。
我很确定我得到了正确的嵌套 if 语句,但是当它尝试从这个新调用中获取游标时,我不断得到 ora-24338 语句句柄未执行。
问题存储过程调用是中间问题。
create or replace Procedure procedure_name (
OutVar out varachar2,
Outvar2 out number,
inParam1 date,
REf-Cur1 in out sys_refcursor,
REf-Cur2 in out sys_refcursor,
REf-Cur3 in out sys_refcursor,
REf-Cur4 in out sys_refcursor,
REf-Cur5 in out sys_refcursor
)
is
tIsBindVar1 varchar2(100);
tIsBindVar2 varchar2(100);
tOutVar1 varchar2(100);
TOutVar2 varchar2(100);
Begin
Select Max(T.Var1)
into tIsBindVar1
From table1
where T.aField = inParam1;
Select Function_Name (inParam1)
into tIsBindVar2
from Dual;
IF tIsBindVar1 is NOT NULL
THEN
Select P.Field_A P.Field_B
INTO tOutVar1, tOutVar2
FROM table1
WHERE P.Field_A = inParam1;
Stored_Proc_One (tInParam => tOutVar1,
inParam1 => inParam1,
5 cursors => 5 cursors);
ELSE
IF tIsBindVar2 = 'Y'
THEN
Stored_Proc_Two (inParam1 => inParam1,
5 cursors => 5 cursors);
ELSE
Stored_Proc_Three ();
Stored_Proc_Two ( inParam1 => inParam1, 5 cursors => 5 cursors);
END IF;
END IF;
SELECT tOutVar1, tOutVar2
INTO OutVar1, OutVar2
FROM DUAL;
一些快速的额外说明。
存储过程 1 和 2 是直接获取数据,没什么特别的,存储过程 3 根据一些输入参数(未列出)生成一些数据,并调用存储过程 2 进行收集。
我可以更改这些存储的 proc 调用,但我总是会从中间的错误中得到相同的错误。这包括以任何顺序更改条件。
我试图简化代码,因为我不是在寻找任何人为我做这项工作,而是试图了解问题所在。
希望我没有遗漏任何重要的东西,但我认为问题在于我如何执行嵌套 if。我当然不认为问题出在存储过程本身,因为我说当我更改订单时它们会起作用。
因此,如果冗长且很难阅读代码。去尝试找到他们保存编辑信息的地方并清理它。
提前致谢。