savepoint 可用于transaction 中标记点以便进行事务回滚操作。
弊端:
单个事务中
commit后自动清除
table TEST_TABLE
ID NAME
编写存储过程语句
DECLARE
v_number number;
BEGIN
savepoint A;
v_number:=1;
INSERT INTO TEST_TABLE VALUES(v_number,'frank');
savepoint B;
v_number:=2;
INSERT INTO TEST_TABLE VALUES(v_number,'lucy');
savepoint C;
v_number:=3;
INSERT INTO TEST_TABLE VALUES(v_number,'Andy');
rollback to B;
END;
A B C 三点正常回滚,因为在同一个事务中
结果示例:
清空表
事务中commit后,commit之前的savepoint自动清除
DECLARE
v_number number;
BEGIN
savepoint A;
v_number:=1;
INSERT INTO TEST_TABLE VALUES(v_number,'frank');
savepoint B;
v_number:=2;
INSERT INTO TEST_TABLE VALUES(v_number,'lucy');
commit;
savepoint C;
v_number:=3;
INSERT INTO TEST_TABLE VALUES(v_number,'Andy');
rollback to B;
END;
执行过程发生错误
错误发送在commit 行,之前插入已经执行,表格数据