我必须将数据从xlm插入到10个表中,层次结构如下所示。
我正在使用SavePoint,如果看到任何验证缺失,我将回滚该特定保存点。
我的问题是,我是否必须使用10个保存点,以便回滚所有表的事务或只有一个保存点就够了?
答案 0 :(得分:1)
如果任何验证在t1以上的t3到t10失败,则t2表插入应该回滚。
所以你的意思是如果在插入T3..T10时出现任何问题,你希望整个事务回滚到初始点,即T1和T2的任何插入也应该回滚。
然后为什么要创建一个保存点。只需发出 ROLLBACK ,它就会回滚所有插入,整个事务。
无论如何,如果你真的需要,那么在开始T1上的任何事务之前先创建一个SAVEPOINT。现在,如果任何验证失败, 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