Oracle 文字から数値変換エラーのキャッチ方法①(ORA-06502について)

nomaldogです。

今後、仕事のシステム開発や、趣味のゲーム制作で調査した内容とか
メモ代わりにでも書いていこうと思います。


今回は、少し前から気になりつつも後回しにしていた
Oracleの文字から数値変換エラーのキャッチ方法について簡単にまとめます。 

<やりたいこと>
  • PL/SQLで文字⇒数値変換の例外をキャッチする
<検証環境>
  • 検証・評価環境はOracle Database 12c
<調査の経緯>

初めは以下のようなPL/SQLを書いてエラーコードを確認しました。

DECLARE
  v_num_ NUMBER;
BEGIN
  v_num_ := 'ABC';
END;
/

で、発生したエラーは以下となります。

"ORA-06502: PL/SQL: 数値または値のエラー: 文字から数値への変換エラー。が発生しました"

このエラーコードの事前定義例外をOracle公式リファレンスから探すと"VALUE_ERROR"が該当します。
https://docs.oracle.com/cd/E57425_01/121/LNPLS/errors.htm

なので、以下の要領で例外をキャッチできるはずです。

DECLARE
  v_num_ NUMBER;
BEGIN
  DBMS_OUTPUT.PUT_LINE('デバッグ開始');
  -- 文字列⇒数値型変換
  BEGIN
     v_num_ := 'ABC';
  EXCEPTION
     WHEN VALUE_ERROR THEN
        DBMS_OUTPUT.PUT_LINE('文字列⇒数値型の暗黙変換に失敗しました。');
  END;
END;
/

実際に実行してみると、ちゃんと例外をキャッチできてることが分かります。

デバッグ開始
文字列⇒数値型の暗黙変換に失敗しました。
<結論>

Oracleの文字⇒数値変換時のエラーはエラーコード"ORA-06502"で例外が投げられ、
事前定義例外の"VALUE_ERROR"でキャッチすることができました。

<補足>

類似した事前定義例外である、"INVALID_NUMBER"(ORA-01722)はSQL中での変換エラーで、
"VALUE_ERROR"(ORA-06502)はPL/SQLの変換エラーという差異があります。
こちらについては、後日に別記事として書くか、追記をします。