2つの入力、2つの出力パラメータ、および5つのsys_refcursorsを持つストアドプロシージャがあります。別のストアドプロシージャを呼び出してこれらのカーソルを開いたIF/ELSEは成功しましたが、別のストアドプロシージャ呼び出しである3番目のオプションが必要になりました。3番目のオプションは、2番目のオプションと実質的に同じですが、1つの違いがあります。
ネストされた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 1と2は、まっすぐなデータグラブであり、特別なものではありません。ストアドプロシージャ3は、いくつかの入力パラメータ(リストされていません)に基づいてデータを生成し、ストアドプロシージャ2が呼び出されて収集されます。
これらのストアドプロシージャ呼び出しを変更することができ、常に真ん中の呼び出しから同じエラーが発生します。これには、条件を任意の順序で変更することも含まれます。
私は自分のために仕事をしてくれる人を探しているのではなく、問題が何であるかを理解しようとしているので、コードを単純化しようとしました。
うまくいけば、私は重要なことを何も残さなかったと思いますが、問題は私がネストされたifをどのように実行しているかにあると思います。私は確かにそうは思いません。順序を変更すると機能すると言っているので、ストアドプロシージャ自体に問題があるとは思いません。
したがって、長く曲がりくねっていて、コードを読むのが非常に難しい場合。彼らが編集情報を保持している場所を見つけて、それをクリーンアップしようとしています。
前もって感謝します。