ORA-01722エラーが出たら?無効な数値エラーの原因と直し方

🔍 ORA-01722とは?

Oracleで次のようなエラーが発生した経験はありませんか?

このエラーは日本語では「無効な数値」という意味で、数値型に変換できない文字列を数値として扱おうとしたときに発生します。
Oracle初心者だけでなく、業務システム開発やデータ移行でも頻繁に遭遇する定番エラーのひとつです。


💡 エラーの主な原因

ORA-01722が発生する代表的なパターンを3つに整理します。

① 数値型カラムに文字列データをINSERT

② 文字列を数値比較している

Oracleは自動的に型変換(暗黙変換)を試みますが、変換不可能な文字が含まれているとエラーになります。

③ TO_NUMBERで変換できない文字列を指定


⚙️ 対処法・修正ポイント

✅ 1. カラムのデータ型を確認する

対象カラムがNUMBERVARCHAR2かを事前にチェックしましょう。

型の不一致があれば、INSERT/UPDATE側を修正するか、変換処理を明示的に記述します。

✅ 2. 明示的な変換を行う(TO_NUMBER / TO_CHAR)

暗黙変換に頼らず、意図的に変換処理を書くのが安全です。

または

ただし、TO_NUMBERに文字列が含まれる場合はNULLまたはエラーになるため、CASE式やREGEXP_LIKEで検査してから変換するのがおすすめです。

✅ 3. WHERE句の条件順序に注意

Oracleでは、WHERE句の評価順序によってエラーが出るか出ないかが変わることがあります。


🧪 実務でよくあるケース

状況原因対策
CSVインポートでORA-01722数値列に「-」や空白文字が混入データクレンジング処理を追加
JOIN条件で発生両テーブルの型が不一致CASTで明示的に変換
CASE式で一部の条件だけ文字列条件式の型が揃っていないTO_CHARまたはTO_NUMBERで統一

🧰 エラー行を特定するテクニック

大量データのINSERTやUPDATEでORA-01722が出ると、どの行が原因か分からないことが多いです。
そんなときは以下のように確認します。

このSQLで、数値以外の文字を含む行を特定できます。
特にCSVや外部システム連携時には有効です。


🧩 まとめ

  • ORA-01722は「文字列を数値に変換できない」時に発生するエラー

  • 暗黙変換を避け、明示的なTO_NUMBER/TO_CHARを使用するのが安全

  • REGEXP_LIKEで事前にデータ検証することでエラーを未然に防げる

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

email confirm*

post date*