かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

外部キー制約、エラーになるケース6つ

time 2017/01/20

外部キー制約、エラーになるケース6つ

テーブルに登録するデータを制限する機能である制約の一つである外部キー制約(参照制約・参照整合性制約)について、ORACLEで使用した際に発生するエラーをまとめました。

sponsored link

参照先に存在しないデータを参照元に登録(ORA-02291)

参照先テーブルに存在しないデータを参照元テーブルに登録しようとすると、ORA-02291のエラーとなります。

参照元に存在するデータを参照先から削除or更新(ORA-02292)

参照元テーブルに存在するデータを、参照先テーブルから削除、または該当項目を更新しようとすると、ORA-02292のエラーとなります。

ただし、削除については、外部キー設定時に【ON DELETE SET NULL】や【ON DELETE CASCADE】のオプションを付けなかった場合に限ります。

ちなみに、参照先のデータ削除時に、【ON DELETE SET NULL】を付けて外部キーを設定していた場合は、紐つく参照元テーブルのデータがNULLに更新されます。【ON DELETE CASCADE】を付けて外部キーを作成していた場合は、紐つく参照元テーブルのレコードが削除されます。

更新については、どの外部キー設定時のオプションの有無や種類に関わらず、エラーになります。

参照先に存在しないデータが参照元に存在する状態で外部キー設定(ORA-02298)

参照先テーブルに存在しないデータが参照元テーブルに存在する状態で、外部キーを設定しようとすると、ORA-02291のエラーとなります。

参照先の主キー・一意キー項目以外への外部キー設定(ORA-02270)

参照先テーブルの主キー項目・一意キー項目以外への外部キーを設定しようとすると、ORA-02270のエラーとなります。

参照先のトランケート(ORA-02266)

参照先テーブルにトランケートをしようとすると、ORA-02266のエラーとなります。

ちなみに、参照元テーブルのトランケートは問題なく実行できます。

参照先のテーブル削除(ORA-02449)

参照先テーブルの削除(DROP TABLE)をしようとすると、ORA-02449のエラーとなります。

テーブル削除時にオプション【CASCADE CONSTRAINTS】を付けることで制約と合わせて削除することが出来ます。

ちなみに、参照元テーブルの削除は問題なく実行できます。制約と合わせて削除されます。

まとめ

外部キー制約に関わるエラーを見てきました。

外部キー制約として当然のエラーもありますが、参照先テーブルのトランケートやテーブル削除のエラーは、考慮が漏れてしまうことが意外と多いです。

気をつけましょう。
関連


sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link