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

标签 database oracle plsql constraints

我有一个巨大的 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/

相关文章:

php - 从一个表中选择表行,其中另一个表中表列的值为 x

java - 如何使用java在jsp选择标签中显示数据库中的完整表值

Oracle存储过程OUT参数

java - Blob GetBinaryStream 需要关闭吗?

使用动态 SQL ALTER USER 查询的 SQL 注入(inject)预防

database - 为什么 Aries 在数据库管理恢复中先执行重做再撤消?

mysql - MYSQL表插入1亿条记录出错

java - 即席 sql 的列名

oracle - 获取模式中所有表的计数

xml - 从 Oracle 表在 PL/SQL 中生成 XML 文档