SAVEPOINT

说明

在事务中设置一个保存点

语法

savepoint ::=

参数

savepoint_name

要设置的保存点的名字。

注解

如果此时不在一个事务中,或者名为 savepoint_name 的保存点已经存在,将导致出错。

示例

示例1: 设置保存点

--  清理环境
DROP TABLE tab1 CASCADE;


--  创建表并插入数据
CREATE TABLE tab1 (a INT);

INSERT INTO tab1 VALUES(100);
INSERT INTO tab1 VALUES(200);


SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
总数目:2


--  开始事务
BEGIN;

INSERT INTO tab1 VALUES(300);


--  表中有 3 条数据
SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
------------
300         |
总数目:3

--  设置保存点 sp1
SAVEPOINT sp1;

INSERT INTO tab1 VALUES(400);


--  表中有 4 条数据
SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
------------
300         |
------------
400         |
总数目:4

--  回滚到保存点 sp1
ROLLBACK TO sp1;


--  表中有 3 条数据
SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
------------
300         |
总数目:3

--  回滚整个事务
ROLLBACK;


--  表中有 2 条数据
SELECT * FROM tab1 ORDER BY a;
A(int)      |
------------
100         |
------------
200         |
总数目:2


--  删除表
DROP TABLE tab1;