0

我必须将数据从 xlm 插入 10 个表,层次结构如下。

  • T1 有子表 T2
  • T2 有子表 t3,t4,t5,t6 等直到 t10
  • 如果任何验证在 t3 到 t10 以上 t1 中失败,则 t2 表插入应该回滚。

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

我的问题是,我必须使用 10 个保存点来回滚所有表的事务还是只有一个保存点就足够了?

4

1 回答 1

1

如果任何验证在 t3 到 t10 以上 t1 中失败,则 t2 表插入应该回滚。

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

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

无论如何,如果你真的需要,那么先创建一个 SAVEPOINT,然后在 T1 上开始任何事务。现在,如果任何验证失败,则ROLLBACK TO SAVEPOINT,这将回滚整个事务。

ROLLBACK TO SAVEPOINT 意味着在该特定 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

示例源

于 2015-01-30T06:41:44.183 回答