「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Oracle Database を利用していると、
INSERT や UPDATE 実行時に ORA-02291: 整合性制約違反(親キーがありません) というエラーに遭遇することがあります。

本記事では、

  • ORA-02291 の意味

  • よくある発生原因

  • 実務で使える対処法

  • SQL 例を交えた確認手順

をわかりやすく解説します。


ORA-02291 エラーの意味

ORA-02291 は、
外部キー制約(FOREIGN KEY)に違反した状態でデータを登録・更新しようとした
場合に発生するエラーです。

簡単に言うと、

子テーブルに登録しようとした値が、親テーブルに存在しない

という状態です。


発生しやすい典型例

テーブル構成例 

エラーが発生する SQL

departments.dept_id = 999 が存在しない場合、
ORA-02291 が発生します。


ORA-02291 が発生する主な原因

ORA-02291 が発生する主な原因

原因① 親テーブルに該当データが存在しない

最も多い原因です。

  • 親テーブルへの INSERT 忘れ

  • マスタデータ未登録

  • テスト環境での初期データ不足


原因② データ登録の順序が逆

❌ 子テーブル → 親テーブル
⭕ 親テーブル → 子テーブル

バッチ処理や一括登録でよく発生します。


原因③ 親データが削除されている

  • DELETE 実行済み

  • 論理削除ではなく物理削除している

  • 他処理が先に削除している


原因④ UPDATE による外部キー変更

→ 更新後の値が親テーブルに存在しない場合も発生します。


制約名(どの外部キーか)を確認する方法

エラーメッセージには制約名が含まれています。

制約の詳細確認 SQL

親テーブルを確認する場合:


実務での対処法まとめ

対処法① 親テーブルにデータを先に登録する

その後、子テーブルを登録します。


対処法② 登録順序を見直す

  • バッチ処理

  • CSV 取込

  • アプリの登録ロジック

必ず「親 → 子」の順序になっているか確認しましょう。


対処法③ 親データの存在チェックを行う

INSERT / UPDATE 前の事前チェックとして有効です。


対処法④ 外部キー制約を一時的に無効化(※注意)

本番環境では非推奨
データ不整合の原因になるため、慎重に判断してください。


よくある勘違い

  • ❌ 「PRIMARY KEY のエラー」

  • ❌ 「NOT NULL 制約違反」

👉 **ORA-02291 は必ず「外部キー制約違反」**です。


まとめ

  • ORA-02291 は 親テーブルに存在しないキーを子テーブルで使った時 に発生

  • 原因の大半は

    • 親データ未登録

    • 登録順序ミス

    • 親データ削除

  • 制約名を確認すると原因特定が早い

  • 原則は 親 → 子の登録順を守ること

ORA-xxxx 系エラーは 「意味を正しく理解すれば怖くない」 ものがほとんどです。
本記事がトラブルシューティングの時短に役立てば幸いです。

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x