IBM Extension
IBM Extension

ROLLBACK ステートメント

ROLLBACK ステートメントは、データベース・レコードに対する 1 つまたは複数の変更を永続化すべきでないときに、それらを取り消す手段となります。

構文図を読む構文図をスキップする
ROLLBACK ステートメント - 形式

>>-ROLLBACK----------------------------------------------------><

ROLLBACK ステートメントが実行されると、最後のコミットメント境界以降にコミットメント制御下のファイルに対して行われたすべての変更が、データベースから除去されます。 ファイルが OUTPUT 用にオープンされているときに消去されると、ROLLBACK ステートメントを実行しても、消去されたレコードがファイルに復元されないことに注意してください。

コミットメント境界とは、ROLLBACK または COMMIT ステートメントの前のオカレンスを指します。 COMMIT または ROLLBACK が出されていなかった場合、コミットメント境界は、コミットメント制御下のファイルの最初の OPEN です。 変更の除去は、ROLLBACK を発行する COBOL プログラム内のコミットメント制御下のファイルに対してだけではなく、 コミットメント制御下にあるすべてのファイルに対して行われます。

ROLLBACK が正常に実行されると、コミットメント制御下のファイルに対して保持されていたすべてのレコード・ロックが解放され、レコードが他のジョブにとって使用可能になります。 コミットメント制御は、ジョブ・レベルまたは活動化グループ・レベルで範囲を限定できます。 (コミットメント制御は、デフォルトによって、活動化グループ・レベルで範囲が限定されます。)

ROLLBACK は、コミットメント制御下にないファイルには影響しません。 ROLLBACK が実行され、コミットメント制御下にあるファイルがない場合は、ROLLBACK は無視されます。

コミットメント制御下のファイルは、最後のコミットメント境界以降に行われた変更の状況に影響を与えずに、オープンまたはクローズすることができます。 なお、変更を永続的なものにするには、COMMIT を出さなければなりません。 ROLLBACK が実行されると、ファイルは、実行前と同じオープンまたはクローズ状態に置かれます。

ROLLBACK ステートメントは、次のことは行いません
  • どのファイルの I-O-FEEDBACK 域も修正しません。
  • どのファイルのファイル状況値も設定しません。
ROLLBACK ステートメントに対して、以下の考慮事項が適用されます。
  • ROLLBACK ステートメントは、ファイル位置標識を前のコミットメント境界での位置に設定します。 順次処理を行っている場合には、このことを覚えておくことが大切です。
  • ファイルがオープンされてから COMMIT ステートメントが発行されていない場合には、ROLLBACK ステートメントは、ファイル位置標識を OPEN 時の位置に設定します。
  • 変更がコミットされないままファイルがクローズされている場合には、ROLLBACK 後にファイル位置標識は未定義となります。

コミットメント制御の範囲がジョブ・レベルで限定される場合には、 それぞれのジョブの終わりでコミットメント制御下のすべてのファイルに対して、 コミットされていないレコードの暗黙の ROLLBACK が自動的に行われます。 データベースに対してコミットされていない変更が取り消されます。

コミットメント制御の範囲が活動化グループ・レベルで限定される場合には、 活動化グループが正常に終了するときに、暗黙のコミットが起こります。 活動化グループが異常に終了すると、暗黙の ROLLBACK が起こります。

コミットメント制御について詳しくは、 「IBM® Rational® Development Studio for i: ILE COBOL プログラマーの手引き」を参照してくださ い。

End of IBM Extension
End of IBM Extension