最近のアクセス:
Commit コマンド

データベースに対する一連の変更について、正常終了部分を設定します。

構文

Commit

適用範囲

オブジェクト: ProcedureWeb Panel
ジェネレーター: .NET.NET FrameworkJava、RPG、Cobol、Ruby (GeneXus X Evolution 3 まで)

説明

Commit コマンドは、データベースに対する一連の変更について、正常終了部分を設定します。複数の Commit コマンド (または Rollback コマンド) の間で行われるデータベースに対する一連の変更が、1 つの単位として扱われます (この単位は論理作業単位 (LUW) と呼ばれます)。

これにより、一連の変更がすべてデータベースに適用されること (エラーが発生した場合はまったく適用されないこと) が保証されます。
ナレッジベースに複数のデータストアがある場合、Commit コマンドによって、コマンドの実行時にアクティブなすべてのデータストア (つまりデータベースへの変更の実行先) に対するコミットが行われます。
このコマンドを発行すると、取得していたデータベースのロックがすべて解放されます。
[ Commitment ] プロパティが有効である限り、GeneXus ではすべての Procedure オブジェクトと Transaction オブジェクトのコミットメントコントロールがアクティベートされます。 [ Commit on Exit ] プロパティが Yes に設定されている場合は、データベースを更新するそれぞれのオブジェクトの最後に Commit が生成されます。
Commit コマンドは Procedure オブジェクトのプログラムソース内のどこにでも指定できます。これにより、GeneXus にソース内での Commit の生成が強制されます。
For Each コマンドに Commit コマンドが含まれる場合、Commit は、(For Each 文内の記述箇所に関わらず) EndFor の直前に実行されます。
注:
  • 多くの DBMS で、1 つの論理作業単位 (LUW) 内でのデータベース変更回数に制限を課しています。
大量の行数を操作するバッチプロセスを設計する際には、この制限を考慮します。場合によっては、適宜 Commit コマンドを発行して、大きな LUW を複数の小さな LUW に分割する必要があります。
  • 多くの DBMS で、Commit の実行時にオープン状態のカーソルがすべてクローズされます。
これは、非常に重要な移植性の問題を抱えています。Commit コマンドを含む For Each グループ (または Commit コマンドを含むオブジェクトを呼び出す For Each グループ) でこの問題が発生する場合があります。
  • For Each 内の Commit コマンドは、必ず EndFor の直前で実行されます。
For Each グループ内のどこに Commit コマンドを記述しても同じです。この場合には内部フラグが設定され、実際のデータベースに対するコミットは、For Each 内のデータベース変更の実行後、EndFor の直前に行われます。

Invoice という Transaction オブジェクトがあるとします。
Invoice { InvoiceId* InvoiceDate InvoiceAmount }
このオブジェクトから、アプリケーションデータベースに次のテーブルが作成されます。
InvoiceID* InvoiceDate InvoiceAmount
請求書が 10 件削除されるごとに、Commit を実行する必要があるとします。

これは、次のようにして解決できます。
&i = 0
For each Invoice
    &i = &i + 1
    delete
    If &i = 10
       commit
       &i = 0
    EndIf
EndFor

参考情報

Rollback コマンド
[ Commitment ] プロパティ
[ Commit on Exit ] プロパティ
[ Confirm Transactions ] プロパティ





サブページ
Created: 14/09/18 03:43 by Admin Last update: 23/02/13 20:09 by Admin
カテゴリ
Powered by GXwiki 3.0