我需要更新通过主/外键连接的两个表中的列。我的问题是,当我尝试单独更新任一表时,我会得到以下任一结果(取决于我尝试更新的表):
ORA-02292: 违反完整性约束 (URMS.EMSR_EMS_FK) - 找到子记录
或
ORA-02291: 违反完整性约束 (URMS.EMSR_EMS_FK) - 未找到父 key
有没有办法用新值同时更新两个表?我发现的一个解决方案是复制现有行并将它们作为新行插入,然后可以更新新行 - 然后可以删除旧行。
这是唯一的解决方案还是有更简单的方法来解决这个问题?
最佳答案
您有几个选项作为解决方法。
- 将约束更改为可延迟约束并延迟它。这会导致在提交时间而不是更新时间检查 key 。
- 先更新外键为NULL,然后更新主键,最后再次更新外键。这假设没有
NOT NULL
约束 - 如果情况变得更糟,请创建一条记录(假设给它一个保留 ID 0,以便您可以检测并避免冲突),将外键更新为该记录,然后更新主键,然后更新外键,然后删除该记录。
但是,无法像在其他数据库中使用 ON UPDATE CASCADE
那样在 Oracle 中创建同时更新两者的语句。
关于sql - 同时更新父子表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46173459/