oracle - 违反完整性约束 - 找到子记录

jav*_*irl 4 database oracle plsql constraints

我有一个巨大的pl/sql存储过程,只要插入我们就会进行一些删除.过程从语句开始

 EXECUTE IMMEDIATE 'SET CONSTRAINTS ALL DEFERRED'
Run Code Online (Sandbox Code Playgroud)

在最后一个commit语句中,我收到了ORA-02292:违反了完整性约束AAA.问题是我不知道哪个语句确切地导致它,因为我从父表中删除(在子1之前)和插入父表之前的子表.我试图谷歌它,但到处都说,当我尝试删除时,02292就会发生.

当我尝试在子表中插入值但父项中没有此条目时,是否会发生此错误?

另外,02292和02291有什么区别?

Bob*_*ica 11

ORA-02292表示发生错误是因为A)约束没有指定ON DELETE子句,B)您从主表中删除了一个在子表中具有匹配引用的行.您的选择是修改约束,以便具有ON DELETE CASCADE或确保在从主服务器删除之前删除所有子记录.我的偏好是添加ON DELETE CASCADE,但我想可能有理由不这样做.见ORA-02292.

ORA-02291与此相反.如果您尝试在子表中插入行,则会引发ORA-02291,但主表中不存在约束中指定的新子行上的键字段值.见ORA-02291.