OracleでINSERT文を実行した際、次のようなエラーが表示されることがあります。
このエラーは、NOT NULL制約が設定されているカラムにNULL値を挿入しようとした場合に発生します。
SQLを修正するだけではなく、アプリ側の値生成ロジック、シーケンス、トリガー、デフォルト値の設定漏れなど、原因は複数存在します。
この記事では、ORA-01400が発生する仕組み、よくある原因、チェックポイント、具体的な対策手順をわかりやすく解説します。
ORA-01400 とは?
ORA-01400 は Oracle の NOT NULL 制約に関連するエラーで、
データベースが「空の値を入れないでほしい」と指定しているカラムに NULL を挿入しようとしたときに発生します。
❌ 発生例
user_id が NOT NULL 制約付きである場合、この SQL は失敗します。
エラーメッセージの読み方
例:
-
"APP"→ スキーマ名 -
"USERS"→ テーブル名 -
"USER_ID"→ NULLが禁止されているカラム名
このメッセージをそのまま手掛かりに調査できます。
よくある原因
| 原因 | よくあるケース | 対策 |
|---|---|---|
| NOT NULL制約付きカラムに値が指定されていない | アプリ側で値渡し忘れ | SQL・アプリ修正 |
| シーケンス未使用・NEXTVAL抜け | 主キー自動採番漏れ | sequence.nextval を使用 |
| トリガーが動作していない | DDL変更後トリガー無効化 | トリガー修正・再有効化 |
| DEFAULT値が設定されていない | 設計ミス | DEFAULT 設定 |
| CSVやETL入力データの欠損 | バッチ・移行処理 | データ補正・前処理 |
対応手順(チェックリスト)
-
エラーに表示されたカラムを確認する
-
そのカラムに NOT NULL 制約があるか確認
-
INSERT文に該当カラムが含まれているか確認
-
シーケンス or トリガーが動作しているか確認
-
データ入力元(アプリ・バッチ・CSV)をチェック
具体的な対策例
① SQLで値を指定する
② シーケンスを利用する場合
③ DEFAULT値を設定する
④ トリガーが動作していない場合
修正例
再発防止のポイント
-
必須項目(NOT NULL列)には仕様として意味がある
-
アプリ・バッチ・DB設計のいずれかが不一致だと発生しやすい
-
主キー・採番・入力必須ルールは設計段階で明示することが重要です
対策リスト
✔ DB設計書に必須項目一覧を追加
✔ シーケンス or UUID生成ルールを統一
✔ バッチ/CSV入力処理に前処理ロジックを追加
✔ 例外検知をログに残す仕組みを整備
まとめ
-
ORA-01400は NOT NULL制約付きのカラムにNULLが入ったときに発生します。 -
原因はSQLだけでなく、アプリ側やトリガー、シーケンス設定など多岐にわたります。
-
テーブル制約・アプリ処理・データ移行の3方面から確認することで、効率的に解決できます。

