.\\" auto-generated by docbook2man-spec $Revision: 1.2 $
.TH "ROLLBACK TO SAVEPOINT" "" "2005-01-19" "SQL - 言語" "SQL コマンド"
.SH NAME
ROLLBACK TO SAVEPOINT \- セーブポイントまでロールバック

.SH SYNOPSIS
.sp
.nf
ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] \fIsavepoint_name\fR
.sp
.fi
.SH "説明"
.PP
セーブポイントが確立してから実行されたコマンドを全てロールバックします。
セーブポイントは有効なまま残り、必要に応じて、その後再度ロールバックすることができます。
.PP
\fBROLLBACK TO SAVEPOINT\fRは、指定したセーブポイントより後に確立した全てのセーブポイントを暗黙的に破棄します。
.SH "パラメータ"
.TP
\fB\fIsavepoint_name\fB\fR
ロールバック先のセーブポイントです。
.SH "注釈"
.PP
セーブポイントの確立後に実行されたコマンドの効果を無視することなくセーブポイントを破棄するには、RELEASE SAVEPOINT [\fBrelease_savepoint\fR(l)]を使用してください。
.PP
確立していないセーブポイントの名前を指定するとエラーになります。
.PP
カーソルはセーブポイントという点からはトランザクション外のように振舞います。
セーブポイントの内部で開かれたカーソルは全て、そのセーブポイントがロールバックした時に閉ざされます。
セーブポイントの内部で\fBFETCH\fRコマンドを行ったカーソルの場合は、その後にセーブポイントまでロールバックされたとしても、カーソルの位置は\fBFETCH\fRにより指し示した位置のまま変わりありません。
（つまり\fBFETCH\fRはロールバックされません。）
また、ロールバックによりカーソルは閉ざされません。
その実行によりトランザクションのアボートを引き起こしたカーソルは実行不可能状態に遷移します。
そのためトランザクションは\fBROLLBACK TO SAVEPOINT\fRを使用して戻すことはできますが、そのカーソルをその後に使用することはできません。
.SH "例"
.PP
my_savepointの確立後に実行されたコマンドの結果を取消します。
.sp
.nf
ROLLBACK TO SAVEPOINT my_savepoint;
.sp
.fi
.PP
セーブポイントのロールバックによるカーソル位置への影響はありません。
.sp
.nf
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;
.sp
.fi
.SH "互換性"
.PP
SQL:2003標準では、SAVEPOINTキーワードは必須であると規定しています。
PostgreSQLとOracleでは省略することができます。
SQL:2003では、WORKのみ使用できます。
TRANSACTIONは使用できず、ROLLBACKの後のノイズです。
また、SQL:2003では省略可能なAND [ NO ] CHAIN句がありますが、これはまだPostgreSQLではサポートされていません。
このコマンドのこの他は標準SQL互換です。
.SH "関連項目"
BEGIN [\fBbegin\fR(l)], COMMIT [\fBcommit\fR(l)], RELEASE SAVEPOINT [\fBrelease_savepoint\fR(l)], ROLLBACK [\fBrollback\fR(l)], SAVEPOINT [\fBsavepoint\fR(l)]
