データ削除(DELETE)や更新(UPDATE)を行った際に、次のようなエラーが発生したことはありませんか?
このエラーは、「削除しようとしたデータが別のテーブルから参照されているため、勝手に消せません」という意味になります。本記事では、エラーの原因と解決方法を実例付きでわかりやすく解説します。
✅ ORA-02292とは?エラーの意味をわかりやすく解説
ORA-02292エラーは、外部キー(FOREIGN KEY)による整合性制約に違反したときに発生します。
つまり、
✅ 親テーブルのレコードを削除 or 更新しようとした
✅ でも、そのデータを参照している子テーブルのデータが存在している
✅ そのため削除・更新できず、エラーになる
という状況です。
✅ エラーが発生する典型的な例
📘 テーブル構成(例)
テーブル名 | 内容 | 備考 |
---|---|---|
EMP | 社員マスタ | 親テーブル |
SALARY | 給与履歴 | 子テーブル(EMP_IDを参照) |
このEMP_ID = ‘E001’ の社員が SALARY テーブルに登録されている場合、以下のエラーが発生します。
✅ 原因を確認する方法(参照関係を特定)
✅ どのテーブルから参照されているのかを確認
このSQLで、外部キー制約の一覧を確認できます。
✅ 解決方法4パターン(状況に応じて選択)
方法 | 解決内容 | 利用シーン | 注意点 |
---|---|---|---|
① 子テーブルを先に削除 | 手動で削除 | 一時的に消す場合 | データ消失に注意 |
② 外部キーをNULL許可に | UPDATE対応可 | 柔軟な参照解除用 | 設計による |
③ ON DELETE CASCADEを設定 | 親削除で自動削除 | 自動削除したい場合 | 子も消える |
④ 制約を一時的に無効化 | 一時的に制約OFF | 大量データ移行時 | 使い方注意 |
✅ 解決方法の実例SQL
✅ ① 子テーブルのデータを先に削除
✅ ② 外部キー制約をNULL許可に変更
✅ ③ 親削除時に子も自動削除(ON DELETE CASCADE)
✅ ④ 一時的に制約を無効化(※使用注意)
✅ よくある質問(FAQ)
❓ UPDATEでも発生する?
はい。親キーを変更して子テーブルとの整合性が崩れる場合にも発生します。
❓ 本当に削除して良いかわからない…
業務データでは「子テーブルに履歴が残っている=重要なデータ」のケースも多いため、安易な削除は避けましょう。
✅ まとめ:削除順序と制約を理解することが鍵!
抑えるポイント | 内容 |
---|---|
エラー原因 | 子テーブルに参照されている |
重要事項 | 削除順序「子→親」 |
推奨対策 | ON DELETE CASCADEの活用も検討 |