sql - 同时更新父子表

标签 sql plsql oracle-sqldeveloper plsqldeveloper

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

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/

相关文章:

php - 刷新注册页面时,为什么在表中添加空行。甚至没有填写表格

mysql - Mysql group_concat 的问题

sql - 坚持 SQL 连接查询

oracle - "table view does not exist"使用外部表时出错

java - 使用 JOOQ 从 Oracle 存储过程返回输出参数列表

oracle - PLSQL 将变量传递给外部 .SQL 脚本

php - 合并 SQL 结果的最佳方式? 2 个请求与 1 个?

sql - 选择超过 16 位数字会导致值错误

java - 在 Ubuntu 中无法在没有 sudo 的情况下启动 sqldeveloper

oracle - Oracle PL/SQL developer中查看时间部分和日期的设置是什么?