SAVEPOINT概述
SAVEPOINT与COMMIT、ROLLBACK同属于Transaction Control。
一个Transaction的描述默认从第一个DML语句开始。Transaction一直继续直到有COMMIT或者ROLLBACK声明出现。SAVEPOINT并不属于SQL标准里,它的作用仅仅是为了方便编程过程中快速方便的回到一些声明语句的位置,也就是起到了标记的作用。SAVEPOINT并不需要单独考虑,因为它并不会终止一个Transaction。
SAVEPOINT 语法
SAVEPOINT主要作用
在一个Transaction中标记Statement,以免需要ROLLBACK时回退全部的语句。通过使用SAVEPOINT,可以在ROLLBACK时会退到指定的SAVEPOINT位置,这个位置之前的Statement依然存在,同时所在的Transaction也依然存在,仍然处于uncommitted状态,对其他会话也依然可见。
SAVEPOINT使用注意
一个Transaction一旦
COMMIT之后,
COMMIT之前的所有SAVEPOINT都将失效。换句话说,在
COMMIT之后无法使用ROLLBACK回退到指定的SAVEPOINT位置,因为
COMMIT之后已经无法找到之前的SAVEPOINT。
-
SQL> create table product(pcode number(2),pname varchar2(10));
-
-
Table created.
-
-
SQL> insert into product values(1,'pen');
-
-
1 row created.
-
-
SQL> insert into product values(2,'pencil');
-
-
1 row created.
-
-
SQL> savepoint a;
-
-
Savepoint created.
-
-
SQL> update product set pcode=10 where pcode=1;
-
-
1 row updated.
-
-
SQL> savepoint b;
-
-
Savepoint created.
-
-
SQL> delete from product where pcode=2;
-
-
1 row deleted.
-
-
SQL> commit;
-
-
Commit complete.
-
SQL> delete from product where pcode=10;
-
-
-
1 row deleted.
-
-
-
SQL> rollback to savepoint a;
-
rollback to savepoint a
-
*
-
ERROR at line 1:
-
ORA-01086: savepoint 'A' never established in this session or is invalid
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30349018/viewspace-1849709/
,如需转载,请注明出处,否则将追究法律责任。