同时更新父子表

Tom*_*omB 5 sql plsql plsqldeveloper oracle-sqldeveloper

我需要更新通过主/外键连接的两个表中的列。我的问题是,当我尝试分别更新任何一个表时,都会出现以下两种情况(取决于我尝试更新的表):

ORA-02292:违反完整性约束(URMS.EMSR_EMS_FK)-找到子记录

要么

ORA-02291:违反完整性约束(URMS.EMSR_EMS_FK)-找不到父密钥

有没有办法用新值在完全相同的时间更新两个表?我发现的一个解决方案是复制现有行并将它们插入为新行,然后可以对其进行更新-然后可以删除旧行。

这是唯一的解决方案,还是有更简单的方法解决此问题?

Chr*_*ers 6

您有几个选项作为解决方法。

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

但是,无法像ON UPDATE CASCADE在其他一些数据库中那样,在 Oracle 中创建同时更新这两个语句的语句。