ROLLBACK TO

Name

ROLLBACK TO SAVEPOINT -- 回滾到一個保存點

Synopsis

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name

描述

回滾所有指定保存點建立之後執行的命令。保存點仍然有效,並且需要時可以再次回滾到該點。

ROLLBACK TO SAVEPOINT 隱含地刪除所有在該命名保存點之後建立的保存點。

參數

savepoint_name

回滾截至的保存點。

注意

使用 RELEASE SAVEPOINT 刪除一個保存點, 而不會拋棄這個保存點建立之後執行的命令結果。

聲明一個還沒有建立的保存點名字是一個錯誤。

在保存點方面,游標有一些非交易性的行為。任何在保存點裡打開的游標不會在回滾掉這個保存點之後關閉。 如果一個游標在保存點裡面,並且游標被一個 FETCH 命令影響, 而這個保存點稍後回滾了,那麼這個游標的位置仍然在 FETCH 讓它指向的位置 (也就是,FETCH 不會被回滾)。 如果一個游標的操作導致交易回滾,那麼這個游標就會置於不可執行狀態, 所以,儘管一個交易可以用 ROLLBACK TO SAVEPOINT 重新恢復,但是游標不能再使用了。

例子

撤銷 my_savepoint 建立之後執行的命令的影響:

ROLLBACK TO SAVEPOINT my_savepoint;

游標位置不受保存點回滾的影響:

BEGIN;

DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2;

SAVEPOINT foo;

FETCH 1 FROM foo;
 ?column? 
----------
        1

ROLLBACK TO SAVEPOINT foo;

FETCH 1 FROM foo;
 ?column? 
----------
        2

COMMIT;

相容性

SQL:2003 標準聲明關鍵字 SAVEPOINT 是必須的。 PostgreSQLOracle 允許省略 SAVEPOINT 關鍵字。 SQL:2003 只允許 WORK,不允許 TRANSACTION 作為 ROLLBACK 後面的噪音鍵字。 還有,SQL:2003 有一個可選的子句 AND [ NO ] CHAIN, 目前 PostgreSQL 還不支援。否則,這個命令完全兼容 SQL 標準。

又見

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT