「ORA-00600: 内部エラー・コード・・・」 のようにOracle で定義されているエラーだけでなく ユーザーが独自にエラー番号を定義して例外を発生させるサンプルを掲載しています。
スポンサーリンク
ユーザーが定義できる番号は 「ORA-20000~ORA-20999」のようです。色々なパッケージなどでも独自でエラー番号を定義して使用していると思いますので、重複したりするかもしれません。
ユーザの独自例外の発生
CREATE OR REPLACE PROCEDURE TEST_PROC(userId VARCHAR2) IS BEGIN -- 特定の場合のみ例外を発生させる if(userId = '0010') then -- 例外番号 -20500 のOracle例外を発生させる raise_application_error(-20500, '何度いったらわかるの?もう来ないでください。'); else -- 何もしない null; end if; END; /
上記のプロシージャを呼び出すと、例外が発生します。
ORA-20500: 何度いったらわかるの?もう来ないでください。
今までORA-(ハイフン)番号かと思っていましたが、ハイフンではなく、マイナスのようですね。ただ、それだけですが。
独自に定義した例外を捕捉 ( キャッチ ) する
例外を発生させることができるならば、捕捉することもできます。独自定義した例外を捕捉するサンプルです。詳細はコメントを参照ください。
CREATE OR REPLACE PROCEDURE TEST_PROC(userId VARCHAR2) IS /* * 捕捉するための例外変数の定義し、 * 独自の例外番号との紐付けを行う */ personalBlockException EXCEPTION; PRAGMA EXCEPTION_INIT(personalBlockException, -20500); BEGIN BEGIN if(userId = '0010') then -- 例外番号 -20500 のOracle例外を発生させる raise_application_error(-20500, 'ユーはお断り'); else -- 何もしない null; end if; EXCEPTION WHEN personalBlockException THEN -- ORA-20500 を捕捉する dbms_output.put_line('エラーコード : ' || sqlcode); dbms_output.put_line('エラーメッセージ: ' || sqlerrm); /* * エラーコード : -20500 * エラーメッセージ: ORA-20500: ユーはお断り */ END; END; /