!--a11y-->

データベースプログラミングの面から言うと、データベース LUW はデータベースコミットで終わる一連の不可分なデータベース操作です。データベース LUW は、データベースシステムによって完全に実行されるか、またはまったく実行されません。データベース LUW が正常に実行されると、データベースは整合性のある状態となります。データベース LUW 内でエラーが発生すると、そのデータベース LUW 開始後に行われたすべてのデータベース変更が取り消されます。これによって、データベースの状態はトランザクションが開始する前のままとなります。

データベース LUW 内で行われるデータベースの変更は、データベースコミットが実行されるまでデータベースに書き込まれません。それまでの間は、データベースロールバックによって変更を取り消すことができます。R/3 システムでは、データベースのコミットとロールバックを暗黙的に、またはコマンドを使用して明示的にトリガすることができます。
1 つのワークプロセスで実行できるデータベース LUW は 1 つだけです。このためワークプロセスでは、ユーザや外部呼出に対する作業を終える際に、必ずデータベース LUW を終了する必要があります。ワークプロセスでは、以下の状況で暗黙的なデータベースコミットがトリガされます。
キ ダイアログステップが完了するとき
制御がワークプロセスから SAP GUI に戻ります。
キ 汎用モジュールが別のワークプロセス (RFC) で呼び出されるとき
制御がもう一方のワークプロセスに移ります。
キ 他のワークプロセスで呼び出された汎用モジュール (RFC) が終了するとき
制御が呼出元ワークプロセスに戻ります。
キ WAIT 命令によってワークプロセスが中断されたとき
制御が別のワークプロセスに移ります。
キ ダイアログステップでのエラーダイアログ ( 情報、警告、またはエラーメッセージ)
制御がワークプロセスから SAP GUI に移ります。
アプリケーションプログラムで明示的なデータベースコミットをトリガするには、2 つの方法があります。
キ 汎用モジュール DB_COMMIT を呼び出す方法
この汎用モジュールでは、データベースコミットの開始のみが行われます。
キ ABAP 命令 COMMIT WORK を使用する方法
この命令は、データベースコミットを開始するだけでなく、他のタスクも実行します (COMMIT WORK に関するキーワード文書を参照) 。
以下の状況が発生すると、暗黙的なデータベースロールバックが行われます。
キ アプリケーションプログラムでの実行時エラー
予期せぬ状況 ( ゼロで除算しようとした場合など) が原因でアプリケーションプログラムの強制終了が必要となった場合に、このエラーが発生します。
キ 強制終了メッセージ
強制終了メッセージは、メッセージタイプ A または X が設定された ABAP 命令 MESSAGE によって生成されます。場合によっては ( 更新) 、メッセージタイプ I 、W 、E でも強制終了メッセージが生成されます。このメッセージによって、現在のアプリケーションプログラムが終了します。
ABAP 命令 ROLLBACK WORK を使って、データベースロールバックを明示的にトリガすることができます。この命令は、データベースロールバックを開始するだけでなく、他のタスクも実行します(ROLLBACK WORK に関するキーワード文書を参照) 。
以上のことから、データベース LUW が開始および終了するポイントをまとめると次のようになります。
キ ダイアログステップが開始されるとき ( ダイアログステップがワークプロセスに送信されるとき)
キ 前のデータベース LUW がデータベースコミットで終了するとき
キ 前のデータベース LUW がデータベースロールバックで終了するとき
キ データベースコミットが発生するとき。これによって、すべての変更がデータベースに書き込まれます。
キ データベースロールバックが発生するとき。これによって、LUW 内で行われたすべての変更が取り消されます。
データベース LUW の構成要素には、その LUW 内で実行されるデータベース変更のほかに、データベースロックもあります。データベースシステムは、ロックを使用して複数のユーザが同じデータを同時に変更できないようにします。そうしないと、矛盾するデータがデータベースに書き込まれるおそれがあります。データベースロックはデータベース LUW が存続する間のみ有効です。データベース LUW が終了すると、データベースロックは自動的に解除されます。SAP LUW をプログラミングするには、R/3 システムに、存続期間の長いロックを登録できるロックメカニズムが必要です (R/3 のロックの概念 を参照) 。