【发布时间】:2012-06-18 17:39:55
【问题描述】:
我有一个巨大的 pl/sql 存储过程,只要插入,我们就会在其中进行一些删除。 程序以语句开始
EXECUTE IMMEDIATE 'SET CONSTRAINTS ALL DEFERRED'
在最后的commit 语句中,我收到了 ORA-02292:违反了完整性约束 AAA。
问题是我不知道究竟是哪个语句导致它,因为我既从父表中删除(在子表之前),又在父表之前插入子表。
我试图用谷歌搜索它,但到处都说我只尝试删除时会发生 02292。
当我尝试在子表中插入值但父表中没有此条目时会发生此错误吗?
另外,02292 和 02291 有什么区别?
【问题讨论】:
-
你有循环依赖吗?如果答案是否定的,那么只需按正确的顺序插入即可。如果你这样做了,为什么不一直推迟约束?在过程开始时执行此操作将表明您的架构/数据模型存在问题。
-
是的,我知道这个数据模型有很大的问题(当然是其他人写的),但是之前没问题,现在开始失败了。所以我需要找出是什么原因造成的。是因为删除,还是特别是插入。
标签: database oracle plsql constraints