無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

ROLLBACK TO SAVEPOINT

名前

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

概要

ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] 

savepoint_name

説明

セーブポイントの設定後に実行されたコマンドを全てロールバックします。 セーブポイントは有効なまま残るので、必要に応じて、その後再度ロールバックすることができます。

ROLLBACK TO SAVEPOINT は、指定したセーブポイントより後に設定した全てのセーブポイントを暗黙的に破棄します。

パラメータ

savepoint_name

ロールバック先のセーブポイントです。

注釈

セーブポイントの設定後に実行されたコマンドの結果を維持したままセーブポイントを破棄するには、 RELEASE SAVEPOINT を使用してください。

設定されていないセーブポイントの名前を指定するとエラーになります。

カーソルはセーブポイントという観点から見るとトランザクションの外にあるかのように振舞います。 セーブポイントの内部で開かれたカーソルは全て、そのセーブポイントがロールバックした時に閉ざされます。 セーブポイントの前に開かれたカーソルに対しセーブポイント内で FETCH または MOVE コマンドを実行した場合、その後、ロールバックされたとしても、カーソルの位置は 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 キーワードは必須です。 しかし、 PostgreSQL Oracle では省略することができます。 SQLで使用できるのは、 WORK のみです。 TRANSACTION は使用できず、 ROLLBACK の後のノイズワードとして扱われます。 また、SQLでは省略可能な AND [ NO ] CHAIN 句がありますが、これは PostgreSQL では現在サポートされていません。 その他については、このコマンドは標準SQLと互換性を持ちます。

関連項目

BEGIN , COMMIT , RELEASE SAVEPOINT , ROLLBACK , SAVEPOINT

powered by SEO.CUG.NET