删除行的SQL删除 - " ORA-02292:违反完整性约束(..) - 找到子记录"

时间:2014-04-22 17:35:59

标签: sql database oracle11g

我有一个由四个表组成的数据库。关系模式如下图所示:

enter image description here

以下是行:

enter image description here

现在我正在尝试删除拥有者ID为OW1的所有者。因为id是所有者表中的主键和其他表中的外键所以它不允许我删除该行。这是我试过的SQL:

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

它返回:

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

我不允许在关系图中将删除规则设置为“CASCADE”。 请帮忙:(

2 个答案:

答案 0 :(得分:4)

好吧,如果匿名块计为一个语句,只需将删除包装在一个块中:

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 Fiddle。看起来有点像作弊,但如果这些是你已经给予的条件......

答案 1 :(得分:3)

有时候,找出哪些子引用表拒绝从父表中删除数据很麻烦。在这种情况下,我们可以使用此查询找到对主表的引用。

   select * from
       all_constraints where
            r_constraint_name in
                 (select  constraint_name from all_constraints
                  where table_name= '<PARENT_TABLE_NAME>');  

通过浏览结果列表,可以轻松找到参考。希望对您有所帮助。