我有一个巨大的 pl/sql 存储过程,我们在其中进行一些删除和插入。 程序以语句开始
EXECUTE IMMEDIATE 'SET CONSTRAINTS ALL DEFERRED'
在最后一个 commit
语句中,我收到 ORA-02292:违反了完整性约束 AAA。
问题是我不知道究竟是哪个语句导致了它,因为我既从父表中删除了(在子表之前)又在父表之前插入了子表。
我试着用谷歌搜索它,但到处都说 02292 只在我尝试删除时发生。
当我尝试在子表中插入值但父表中没有此条目时,是否会发生此错误?
还有,02292和02291有什么区别?
最佳答案
ORA-02292 表示错误发生是因为 A) 约束没有指定 ON DELETE 子句,并且 B) 您从主表中删除了在子表中具有匹配引用的行。您的选择是修改约束,以便具有 ON DELETE CASCADE 或确保在从主记录中删除之前删除所有子记录。我的偏好是添加 ON DELETE CASCADE,但我想可能有不这样做的理由。参见 ORA-02292 .
ORA-02291 与此相反。如果您尝试向子表中插入一行,但主表中不存在约束中指定的新子行上的关键字段值,则会引发 ORA-02291。参见 ORA-02291 .
关于database - oracle - 违反完整性约束 - 找到子记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054272/