如果缺少任何验证,如何回滚每个插入

How to rollback each and every insertion if there is any validation is missing

我必须从 xlm 插入数据到 10 tables,层次结构如下。

我正在使用 SavePoint,如果发现缺少任何验证,我将回滚该特定的保存点。

我的问题是,我是否必须使用 10 个保存点以便回滚所有 table 的事务或仅使用一个保存点就足够了?

If any of the validation fails in t3 to t10 above t1, t2 tables insertion should rollback.

所以你的意思是,如果在插入 T3..T10 时出现任何问题,你希望整个事务回滚到初始点,即任何插入 T1 和 T2 的操作也应该回滚。

那为什么要创建一个保存点。只需发出 ROLLBACK,它将回滚所有插入,整个事务。

无论如何,如果您确实需要,请先创建一个 SAVEPOINT,然后再在 T1 上开始任何事务。现在,如果任何验证失败,ROLLBACK TO SAVEPOINT,这将回滚整个事务。

回滚到保存点意味着在该特定保存点之后发生的任何事务都将回滚到该保存点。

例如,

SQL> SAVEPOINT A    

SQL> INSERT INTO TEST VALUES (1,'Savepoint A');

1 row inserted.    

SQL> SAVEPOINT B    

SQL> INSERT INTO TEST VALUES (2,'Savepoint B');

1 row inserted.    

SQL> ROLLBACK TO B;    

Rollback complete.    

SQL> SELECT * FROM TEST;    

ID  MSG  
--------    -----------   
1           Savepoint A

Example source