ROLLBACK TO SAVEPOINT

名前

ROLLBACK TO SAVEPOINT -- セーブポイントまでロールバックする

概要

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では、SAVEPOINTキーワードは必須です。 しかし、PostgreSQLOracleでは省略することができます。 SQLで使用できるのは、WORKのみです。 TRANSACTIONは使用できず、ROLLBACKの後のノイズワードとして扱われます。 また、SQLでは省略可能なAND [ NO ] CHAIN句がありますが、これはPostgreSQLでは現在サポートされていません。 その他については、このコマンドは標準SQLと互換性を持ちます。

関連項目

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, SAVEPOINT