1

我正在开发一个 Oracle sql 数据库。我有一个存储过程,我需要更新表中主键的值。该值由另一个表中的外键引用。

我可以禁用该外键约束,然后执行更新,然后重新启用它,这样就可以了。

问题是,如果在更改外键状态后出现问题,我无法在更新之前回滚。

恢复:

  1. 更新
  2. 更改外键
  3. 回滚

有什么方法可以在执行更新之前回滚到状态,如果是,那么如何?

谢谢。

4

1 回答 1

3

不幸的是没有。ALTER TABLE 是 DDL 命令,不能ROLLBACK编辑 DDL 语句。所以你不能在这个命令之前回滚。

您的解决方案可能是将外键更改为延迟验证。然后,您可以在 ona 事务中使用两个更新来更改主键和外键。约束将在下次提交时验证。

于 2012-10-16T13:28:55.647 回答