【问题标题】:Update Parent and Child Table Simultaneously同时更新父子表
【发布时间】:2018-02-20 17:50:49
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: sql plsql oracle-sqldeveloper plsqldeveloper


【解决方案1】:

您有几种解决方法。

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

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

【讨论】:

    猜你喜欢
    • 2020-06-28
    • 1970-01-01
    • 2020-10-26
    • 2021-11-05
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    相关资源
    最近更新 更多