以下のように表示されます。
(日本語)
ORA-01722: 数値が無効です。
(英語)
ORA-01722: invalid number
発生パターン
このエラーは以下のような場合に発生します。
- 数値が想定される場面で数値以外が設定されていた
- NUMBER型に文字列をセットしようとした
- エラー例1
- SQL> select to_number('ABC') from dual; select to_number('ABC') from dual * 行1でエラーが発生しました。: ORA-01722: 数値が無効です。
文字列 "ABC" を数値型に変換しようとしてエラーとなっています。
- エラー例2
- SQL> SELECT NVL(1, 'a') FROM dual; SELECT NVL(1, 'a') FROM dual * 行1でエラーが発生しました。: ORA-01722: 数値が無効です。
NVL対象の値と変換値の型が異なるためエラーとなっています。
- エラー例3
- SQL> select * from m_test where kbn = 1; select * from m_test where kbn = 1; * 行1でエラーが発生しました。: ORA-01722: 数値が無効です。
kbnの型が文字型で、数値以外の値がセットされている前提です。
- エラー例4
- SQL> select to_char('a', '9') from dual; select to_char('a', '9') from dual * 行1でエラーが発生しました。: ORA-01722: 数値が無効です。
数値フォーマットを指定したTO_CHARで、数値でない値を指定したためエラーとなっています。
対処法
- TO_NUMBERしている値が文字列でないか確認する
- 数値型のカラムに文字列をINSERT、UPDATEしていないか確認する
- WHERE句で、文字型のカラムに対して数値を条件指定していないか確認する