У меня есть хранимая процедура с двумя входными, двумя выходными параметрами и 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;
Некоторые быстрые дополнительные примечания.
Stored_procs один и два — это прямые захваты данных, ничего особенного, хранимый процесс 3 генерирует некоторые данные на основе некоторых входных параметров (не перечисленных), а хранимый процесс 2 вызывается для сбора.
Я могу изменить эти сохраненные вызовы процедур, и я всегда получаю ту же ошибку из среднего. Это включает в себя изменение условий в любом порядке.
Я попытался упростить код, так как я не ищу, чтобы кто-то сделал работу за меня, а пытался понять, в чем проблема.
Надеюсь, я не упустил ничего важного, но я думаю, что проблема в том, как я делаю вложенные if. Я, конечно, не думаю, что проблема в самих хранимых процессах, поскольку я говорю, что они работают, когда я меняю порядок.
Так что, если код длинный и очень трудный для чтения. Постараюсь найти, где они хранят информацию о редактировании, и очистить ее.
Заранее спасибо.
Stored_Proc_Three ();
неверно. Должно бытьStored_Proc_Three;
(без скобок, так как нет параметров). - person Ben   schedule 06.05.2012