1. ホーム
  2. sql

[解決済み] SQLで行を削除すると、"ORA-02292: 整合性制約 (...) に違反しました - 子レコードが見つかりました" と返される。

2022-03-03 04:26:01

質問

4つのテーブルからなるデータベースを持っています。関係スキーマは以下の通りです。

そして、これが行です。

次に、オーナーIDを持つオーナーを削除しようとしています。 OW1 . このidはownerテーブルの主キーであり、他のテーブルの外部キーであるため、その行を削除することができないのです。以下は、私が試したSQLです。

 delete from owners
 where ownerid = 'OW1' and petid = 'PT1'

そして、それは.を返します。

ORA-02292: integrity constraint (TEST_1.ADDRESSES_OWNERS_FK) violated - child record found

また、リレーションシップ図で削除ルールを「CASCADE」に設定することができません。 助けてください :(

どうすればいいですか?

まあ、匿名ブロックが1つのステートメントとしてカウントされるなら、削除をブロックにラップすればいいだけです。

begin
  delete from addresses where ownerid = 'OW1';
  delete from contacts where ownerid = 'OW1';
  delete from pets where ownerid = 'OW1';
  delete from owners where ownerid = 'OW1';
end;
/

SQLフィドル . ちょっとズルい気もするけど、これが与えられた条件なら...。