Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

IBM iでのコミット制御の関連については、『LANSA/ADユーザーガイド』の「コミット制御を使用する」を参照してください。

移植性に関する考慮事項

Visual LANSAを使用している場合は、『LANSAアプリケーション設計ガイド』の「コミット制御」を参照してください。

AnchorWITH_UPDIDWITH_UPDIDWITH_UPDID

削除する行の更新 ID 列と比較する更新 ID 列を含むフィールドの名前を指定します。

WITH_KEY、WITH_RRN、または WHERE が指定されている場合にのみ有効です。

このパラメータで指定されるフィールドはすべて、RDML または LANSA データ ディクショナリ内で定義され、数値である必要があります。

テーブルに LANSA 更新 ID 列が含まれる場合にのみ有効です。

RDMLX コードでのみ有効です。

警告:

...

   FETCH WITH_KEY( ) または WITH_RRN( )
DISPLAY
...
DELETE (WITH_KEYなし および WITH_RRNなし)

  
DELETE コマンドには WITH_KEY または WITH_RRN パラメータがないため、(FETCH コマンドによって) 読み取られた最後の行を削除する必要があることを示しています。

この状況では、「交差更新ウィンドウ」は、行が FETCH された時点から DELETE された時点までの間隔にあります。

Note

注: これには時間がかかる場合があります。

これは、自動「クロス更新」チェック機能の正しく有効な使用法です。 FETCH と DELETE の間に別のジョブ/ユーザーによって行が変更された場合、DELETE によって「クロス更新エラー」が生成されます (これは他のタイプの検証エラーと同様に処理する必要があります)。

  • 明示的な相互更新チェック

次のコマンド フローを考えてみましょう。

インタラクション 1

   FETCH RET_UPDID( ) WITH_KEY( ) or WITH_RRN( )

インタラクション 2 (同じ「ジョブ」または異なる「ジョブ」)

   DELETE WITH_UPDID( ) WITH_KEY( ) or WITH_RRN( )

    
この状況では、「交差更新ウィンドウ」は行が FETCH された時間と DELETE が行われた時間の間の間隔にありますが、この場合、同じ「ジョブ」内で発生しているわけではない可能性があります。

Note

注: これには時間がかかる場合があります。

これは、FETCH と DELETE の両方の WITH_KEY が同じ行に対して機能する限り、明示的な「クロス更新」チェック機能の正しく有効な使用法です。 その行が FETCH と DELETE の間に別のジョブ/ユーザーによって変更された場合、DELETE によって「クロス更新エラー」が生成されます (これは他の種類の検証エラーと同様に処理する必要があります)。

  • 交差更新チェックなし

次のコマンド フローを考えてみましょう。

   FETCH WITH_KEY( ) または WITH_RRN( )
DISPLAY
...
DELETE WITH_KEY( ) または WITH_RRN( ) (ただし、WITH_UPDID はなし)

DELETE コマンドには WITH_KEY または WITH_RRN パラメータがありますが、WITH_UPDID パラメータがないため、特定の行 (または行のグループ) を読み取って削除する必要があることを示します。

これは、自動の「交差更新」チェックを期待するためによくあるコーディングミスです。 DELETE コマンドの WITH_KEY または WITH_RRN 値は、FETCH コマンドの値と同じである必要があります。 ただし、RDML コンパイラは、FETCH コマンドの実行後に値が変更されていないことを確認できないため、DELETE を試行する前に行を (再) 読み取る必要があります。

この状況では、「交差更新ウィンドウ」は、行が DELETE コマンドによって (再) 読み取られてから、DELETE コマンドによって削除されるまでの間隔にあります。 この間隔は非常に短いため、「クロス更新」チェックは事実上無効になります。

これは、自動の「クロス更新」チェックを実質的に無効にするため、対話型シナリオでの DELETE コマンドの有効かつ正しい使用とは見なされません。

  • 鍵なし

DELETE コマンドに WITH_KEY、WHERE、または WITH_RRN パラメーターが指定されていない場合、テーブルから読み取られた最後の行が削除されます。 これらは同等の操作です。

   DELETE FROM_FILE(ORDHDR) WITH_KEY(#ORDNUM

  
機能的には以下と同等です。

   FETCH FROM_FILE(ORDHDR) WITH_KEY(#ORDNUM)
DELETE FROM_FILE(ORDHDR)

    
および:

   DELETE FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)

    
機能的には以下と同等です。

   SELECT FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
DELETE FROM_FILE(ORDLIN)
ENDSELECT

最後の 2 つの例では、注文のすべての注文明細が削除されることに注意してください。 これは、複数の行を削除する、または「一度に設定」を削除する例です。

注: DELETE WITH_KEY または WHERE は、選択ループ内から呼び出されるサブルーチン内の同じテーブルまたはビューの選択ループ内で使用してはなりません。