同时更新父表和子表

时间:2017-09-12 10:00:44

标签: sql plsql oracle-sqldeveloper plsqldeveloper

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

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

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

有没有办法在新值的同时更新两个表?我发现的解决方案是复制现有行并将其作为新行插入,然后可以更新 - 然后可以删除旧行。

这是唯一的解决方案还是有更方便的解决方法?

1 个答案:

答案 0 :(得分:4)

您有一些选项作为解决方法。

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

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