🔍 ORA-01722とは?
Oracleで次のようなエラーが発生した経験はありませんか?
このエラーは日本語では「無効な数値」という意味で、数値型に変換できない文字列を数値として扱おうとしたときに発生します。
Oracle初心者だけでなく、業務システム開発やデータ移行でも頻繁に遭遇する定番エラーのひとつです。
💡 エラーの主な原因
ORA-01722が発生する代表的なパターンを3つに整理します。
① 数値型カラムに文字列データをINSERT
② 文字列を数値比較している
Oracleは自動的に型変換(暗黙変換)を試みますが、変換不可能な文字が含まれているとエラーになります。
③ TO_NUMBERで変換できない文字列を指定
⚙️ 対処法・修正ポイント
✅ 1. カラムのデータ型を確認する
対象カラムがNUMBERかVARCHAR2かを事前にチェックしましょう。
型の不一致があれば、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で事前にデータ検証することでエラーを未然に防げる
