実現したいこと
プロシージャー「test_pro」から呼び出したファンクション「test_fun」を呼び出しており、
ファンクション「test_fun」内でパラメーターエラーを発生させることができております。
現在上記エラーが発生した際、呼び出し元プロシージャー「test_pro」内の例外処理「WHEN OTHERS THEN(14行目)」の方に飛びます。
これをプロシージャー「test_pro」にある「WHEN parameter_err THEN(12行目)」内に処理が飛ぶようにしたいのです。
以下「試したこと」欄②にORACLE例外コード-20001を使用した際の成功例は記載しておりますが、
例外コード-20001などを使わない方法を求めております。
発生している問題・エラーメッセージ
ファンクション「test_fun」内でパラメーターエラーを発生させ、
呼び出し元プロシージャー「test_pro」内の例外処理「WHEN OTHERS THEN(14行目)」の方に飛んでしまう。
該当のソースコード
PL/SQL プロシージャー
1PROCEDURE test_pro( 2 o_return_cd OUT VARCHAR2 -- リターンコード 3) 4IS 5 err_arg1 VARCHAR2(1024); -- エラーメッセージ1 6 err_arg2 VARCHAR2(1024); -- エラーメッセージ2 7 parameter_err EXCEPTION; -- 例外:パラメータエラー 8 result VARCHAR2(14); -- 結果を格納する変数 9BEGIN 10 result := test_fun('T', NULL); 11EXCEPTION 12 WHEN parameter_err THEN 13 DBMS_OUTPUT.PUT_LINE('引数エラー: '); 14 WHEN OTHERS THEN 15 DBMS_OUTPUT.PUT_LINE('その他エラー'); 16END;
PL/SQL ファンクション
1FUNCTION test_fun( 2 i_no testTable.test_NO%TYPE, -- 番号 3 i_hiduke DATE -- 日付 4) RETURN testTable.test_NO%TYPE - 番号 5IS 6 err_arg1 VARCHAR2(1024); --エラーメッセージ1 7 err_arg2 VARCHAR2(1024); --エラーメッセージ2 8 parameter_err EXCEPTION; --例外:パラメータエラー 9BEGIN 10 --引数チェック 11 IF i_kijunnbi IS NULL THEN 12 err_arg1 := '日付'; 13 err_arg2 := i_hiduke; 14 RAISE parameter_err; 15 END IF; 16 return i_no; 17EXCEPTION 18 WHEN parameter_err THEN 19 RAISE; 20 WHEN OTHERS THEN 21 -- 異常終了 22 RAISE; 23END;
試したこと
①ファンクション「test_fun」の19行目を「RAISE parameter_err;」に変更して実行
→結果変わらず。
②プロシージャー「test_pro」の7行目の下に「PRAGMA EXCEPTION_INIT(parameter_err, -20001);」を追加
ファンクション「test_fun」の8行目の下に「PRAGMA EXCEPTION_INIT(parameter_err, -20001);」を追加
ファンクション「test_fun」の19行目を「RAISE_APPLICATION_ERROR(-20001, ‘入力パラメータが不正です’);」に変更
→プロシージャー「test_pro」にある「WHEN parameter_err THEN(12行目)」内に処理が飛ぶ(成功)
補足情報
oracle version 21.0.0.0.0