sql-rollback-to.zh.md 2.1 KB
Newer Older
李少辉-开发者's avatar
李少辉-开发者 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
## 回滚到保存点

ROLLBACK TO SAVEPOINT — 回滚到保存点

## 概要

```
ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name
```

## 描述

回滚在保存点建立后执行的所有命令。保存点仍然有效,如果需要,可以稍后再次回滚。

`回滚到保存点`隐式销毁在命名保存点之后建立的所有保存点。

## 参数

*`保存点名称`*

要回滚到的保存点。

## 笔记

采用[`释放保存点`](sql-release-savepoint.html)销毁保存点而不丢弃建立后执行的命令的效果。

指定尚未建立的保存点名称是错误的。

游标在保存点方面具有某种非事务性行为。当保存点回滚时,在保存点内打开的任何游标都将关闭。如果先前打开的游标受`拿来`或者`移动`命令在稍后回滚的保存点内,光标保持在`拿来`让它指向(即光标移动由`拿来`不回滚)。关闭游标也不会通过回滚来撤消。但是,游标的查询引起的其他副作用(例如查询调用的 volatile 函数的副作用)*是*如果它们发生在稍后回滚的保存点期间,则回滚。执行导致事务中止的游标被置于无法执行状态,因此可以使用以下命令恢复事务`回滚到保存点`,光标不能再使用。

## 例子

撤消之后执行的命令的效果`我的保存点`建立了:

```
ROLLBACK TO SAVEPOINT my_savepoint;
```

光标位置不受保存点回滚的影响:

```
BEGIN;

DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;

SAVEPOINT foo;

FETCH 1 FROM foo;
 ?column?
## Compatibility

 The SQL standard specifies that the key word `SAVEPOINT` is mandatory, but PostgreSQL and Oracle allow it to be omitted. SQL allows only `WORK`, not `TRANSACTION`, as a noise word after `ROLLBACK`. Also, SQL has an optional clause `AND [ NO ] CHAIN` which is not currently supported by PostgreSQL. Otherwise, this command conforms to the SQL standard.

## See Also

[BEGIN](sql-begin.html), [COMMIT](sql-commit.html), [RELEASE SAVEPOINT](sql-release-savepoint.html), [ROLLBACK](sql-rollback.html), [SAVEPOINT](sql-savepoint.html)
```