我必须将数据从 xlm 插入 10 个表,层次结构如下。
- T1 有子表 T2
- T2 有子表 t3,t4,t5,t6 等直到 t10
- 如果任何验证在 t3 到 t10 以上 t1 中失败,则 t2 表插入应该回滚。
我正在使用 SavePoint,如果发现缺少任何验证,我将回滚该特定的保存点。
我的问题是,我必须使用 10 个保存点来回滚所有表的事务还是只有一个保存点就足够了?
我必须将数据从 xlm 插入 10 个表,层次结构如下。
我正在使用 SavePoint,如果发现缺少任何验证,我将回滚该特定的保存点。
我的问题是,我必须使用 10 个保存点来回滚所有表的事务还是只有一个保存点就足够了?
如果任何验证在 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