同时更新父母和子女表



我需要在两个由主/外键连接的表中更新两个表中的列。我的问题是,当我尝试单独更新任一表时,我会得到以下任一(取决于我尝试更新的表):

ORA -02292:违反的完整性约束(urms.emsr_ems_fk) - 找到的子记录

ORA -02291:违反完整性约束(urms.emsr_ems_fk) - 未找到父键

是否有一种方法可以同时使用新值更新两个表?我发现的一种解决方案是复制现有行并将其插入新行,然后可以更新 - 然后可以删除旧行。

这是唯一的解决方案,还是在此解决方案?

您有一些选择作为解决方案。

  • 将约束更改为可延期的约束并延迟它。这会导致在提交时间而不是更新时间检查密钥。
  • 首先将外键更新为null,然后更新主键,然后再次更新外键。假设没有NOT NULL约束
  • 如果更糟的是,请创建一个记录(假设给它保留的ID为0,以便您可以检测并避免冲突),将外键更新到此,然后更新主密钥,然后更新外键,然后删除记录。

但是,没有办法在其他数据库中与ON UPDATE CASCADE一样在Oracle中同时更新两者。

最新更新