在Oracle中是否可以从回滚中跳过表?

8tntrjer  于 2023-08-04  发布在  Oracle
关注(0)|答案(2)|浏览(103)

我有一个场景,其中验证数据,并插入有效的数据到一些表和更新状态到审计表在Oracle包。当存在验证失败时,则希望恢复除审计表信息之外的所有其他表数据。是否可以跳过一个表的回滚。在每个表之后,将状态添加到审计表。提前感谢您的帮助。

ct3nt3jp

ct3nt3jp1#

通常,它是由一个单独的自治事务过程完成的,该过程修改审计表并提交正在进行的更改。
因为它是一个自治事务,所以commit不会影响主事务,所以一旦你rollback,你在所有其他表中所做的更改将被回滚,但存储在审计表中的信息将保持原样。

pkln4tw6

pkln4tw62#

是否可以跳过一个表的回滚。
不可以。当您ROLLBACK一个事务处理时,整个事务处理都将回滚,您无法挑选和选择要回滚或不回滚的事务处理部分。
如果验证失败,则希望还原除审计表信息之外的所有其他表数据。
您需要:
1.使用多个事务处理,在一个事务处理中执行(已验证的)数据修改,在另一个事务处理中执行审计数据修改,然后对第一个事务处理执行ROLLBACK,对第二个事务处理执行COMMIT。这通常是使用AUTONOMOUS TRANSACTION来完成的。
1.使用单个事务并首先执行审核数据修改,创建SAVEPOINT,然后仅执行(经验证的)数据修改,如果修改失败,则使用ROLLBACK TO SAVEPOINT撤消该保存点之后的所有更改。然后,您可以选择COMMIT,也可以选择ROLLBACKSAVEPOINT之前的前一个COMMIT
1.使用单个事务处理,首先执行审计数据修改,然后执行COMMIT,然后才执行(已验证的)数据修改,如果修改失败,则执行ROLLBACK以撤消对最后一个COMMIT所做的所有更改。

相关问题