Page History
7.125.1 UPDATE のパラメータ
|
|---|
ファイル内の更新するフィールド、または更新するフィールドを指定するグループの名前を指定します。
...
移植性に関する考慮事項 | IBM iで、コミット制御下にないファイルの1つ以上のLOBフィールドを更新する場合にI/Oエラーが発生すると、LOB以外のフィールドが更新され、1つ以上のLOBフィールドが更新されない可能性があります。 『LANSAアプリケーション設計ガイド』の「コミット制御」も参照してください。 |
|
|---|
「I/Oコマンドでのファイル名の指定」を参照してください。
|
|---|
「I/Oコマンドでのファイル・キー・リストの指定」を参照してください。
このパラメータによる自動「相互更新」検査への影響の詳細については、次のコメント/警告のセクションを参照してください。
|
|---|
I/O操作の結果の「戻りコード」を受け取るフィールドの名前を指定します。
...
I/O操作の戻りコードについては、「I/Oコマンド戻りコード表」を参照してください。
|
|---|
コマンドの実行時にI/Oエラーが発生した場合に実行するアクションを指定します。
...
上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。
|
|---|
このコマンドで妥当性検査エラーが検出された場合に実行するアクションを指定します。
...
| Info |
|---|
*LASTDISは、「直前の表示画面」がない場合(バッチ・ファンクション内など)でも有効です。この場合、ファンクションが異常終了し、該当するエラー・メッセージが発行されます。 *LASTDISを使用する場合、「直前の表示画面」は、データベース・コマンド(INSERT、UPDATE、DELETE、FETCH、およびSELECT)と同じレベルでなければなりません。データベース・コマンドがSUBROUTINE内で指定され、「直前の表示画面」が呼び出し元ルーチンまたはメインラインの場合など、レベルが異なるとこのファンクションは異常終了し、該当するエラー・メッセージが発行されます。 これは、Visual LANSAでイベント・ルーチンとメソッド・ルーチンを使用する場合には当てはまりません。これらの場合、制御は呼び出しルーチンに戻されます。フィールドには、エラーがあることと、フォームの親階層で見つかった最初のステータス・バーに返されたメッセージが表示されます。または、メッセージがない場合は、実行スタック内で見つかったステータス・バーを持つ最初のフォーム(PRIM_OBJTから継承した再利用可能パーツなど)が表示されます。 |
|
|---|
ファイル内で更新対象のレコードが見つからなかった場合に実行するアクションを指定します。
...
上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。
|
|---|
「レコードが見つからない」メッセージを自動的に発行するかどうかを指定します。
...
*NO以外に指定できる値は*YESのみです。この値を指定すると、メッセージが自動的に発行されます。メッセージは、ユーザーに表示される次の画面形式の22/24行目、またはバッチ・ジョブのジョブ・ログに表示されます。
|
|---|
更新するレコードの相対レコード番号(相対レコード・ファイル処理のための番号)を保持するフィールドの名前を指定します。
...
- 「7.125.2 UPDATE についてのコメント/警告 」に記載されている、このパラメータの使用による自動「相互更新」検査への影響の詳細
- 『Visual LANSA開発者ガイド』の「外部ファイルの読み込み」
|
|---|
更新されたレコードの相対レコード番号を返す先のフィールドの名前を指定します。UPDATEコマンドによってファイル内の複数のレコードを更新した場合は、このフィールドに返される値を使用できません。
...
詳細については、『Visual LANSA開発者ガイド』の「外部ファイルの読み込み」を参照してください。
|
|---|
I/O操作を実際に実行するか、実際に実行したときにファイルおよびデータ・ディクショナリ・レベルの妥当性検査の条件をすべて満たすことができるかを検査するために「シミュレーション」のみを行うかを指定します。
...
*YESを指定した場合、ファイルおよびデータ・ディクショナリ・レベルの検査の条件をすべて満たすことができるかどうかを確認するために、I/O操作がシミュレートされます。このオプションを使用した場合、この検査に関与するデータベース・ファイルがいかなる形でも変更されることはありません。
|
|---|
LANSAリリース4.0プログラム変更レベルE5により、このパラメータは、他のパラメータと機能が重複しています。
...
移植性に関する考慮事項 | Visual LANSAを使用している場合は、『LANSAアプリケーション設計ガイド』の「コミット制御」を参照してください。 |
|
|---|
更新する行の更新 ID 列と比較する更新 ID 列を含むフィールドの名前を指定します。
WITH_KEY または WITH_RRN が指定されている場合にのみ有効です。
このパラメータで指定されるフィールドはすべて、RDML または LANSA データ ディクショナリ内で定義され、数値である必要があります。
テーブルに LANSA 更新 ID 列が含まれる場合にのみ有効です。
RDMLX コードでのみ有効です。
| Warning |
|---|
警告:
UPDATE コマンドによる「クロス更新」チェックの使用を明確に理解する必要があります。 更新が発行されると、WITH_KEY も WITH_RRN も指定されていない場合は自動的に「クロス更新」チェックが行われるか、WITH_UPDID が指定されている場合は明示的に「クロス更新」チェックが行われるか、WITH_UPDID なしで WITH_KEY または WITH_RRN が指定されている場合は実質的にクロス更新チェックが行われない場合があります。 。 I/O が、IBM i のすべてのフィールド名が含まれていない論理ビューを使用している場合、IBM i で IBM i の「その他」ファイルを使用して自動「クロス更新」チェックを試行すると、誤った「クロス更新」エラーが発生することに注意してください。
次のコマンド フローを考えてみましょう。
UPDATE コマンドには WITH_KEY または WITH_RRN パラメータがないため、(FETCH コマンドによって) 読み取られた最後の行を削除する必要があることを示します。 この状況では、「交差更新ウィンドウ」は、行が FETCH された時点から UPDATE された時点までの間隔にあります。 |
Note 注意: これには時間がかかる場合があります。
これは、自動「クロス更新」チェック機能の正しく有効な使用法です。 FETCH と UPDATE の間に別のジョブ/ユーザーによって行が変更された場合、UPDATE によって「クロス更新エラー」が生成されます (これは、他の種類の検証エラーと同様に処理する必要があります)。
- 明示的な相互更新チェック
次のコマンド フローを考えてみましょう。
インタラクション 1
FETCH RET_UPDID( ) WITH_KEY( ) または WITH_RRN( )インタラクション 2 (同じ「ジョブ」または異なる「ジョブ」)
UPDATE WITH_UPDID( ) WITH_KEY( ) または WITH_RRN( )この状況では、「交差更新ウィンドウ」は行が FETCH された時間と UPDATE が行われた時間の間の間隔にありますが、この場合、同じ「ジョブ」内で発生しているわけではない可能性があります。
繰り返しますが、ユーザーが対話の合間にコーヒーを飲みに行った場合、これは非常に長くなる可能性があります。
これは、FETCH と UPDATE の両方の WITH_KEY が同じ行に対して機能する限り、明示的な「クロス更新」チェック機能の正しく有効な使用法です。 その行が FETCH と UPDATE の間に別のジョブ/ユーザーによって変更された場合、UPDATE は「クロス更新エラー」を生成します (これは他の種類の検証エラーと同様に処理する必要があります)。
- 交差更新チェックなし
次のコマンド フローを考えてみましょう。
FETCH WITH_KEY( ) または WITH_RRN( )
DISPLAY
...
UPDATE WITH_KEY( ) または WITH_RRN( ) (ただし WITH_UPDIDは不可)
UPDATE コマンドには WITH_KEY または WITH_RRN パラメーターがありますが、WITH_UPDID パラメーターがないため、特定の行 (または行のグループ) を読み取って更新する必要があることを示します。
自動の「交差更新」チェックを期待するのは、よくあるコーディングミスです。 UPDATE コマンドの WITH_KEY または WITH_RRN 値が FETCH コマンドの値と同じである必要があることは誰もが知っています。 ただし、RDML コンパイラは、FETCH コマンドの実行後に値が変更されていないことを確認できないため、UPDATE を試行する前に行を (再) 読み取る必要があります。
この状況では、「交差更新ウィンドウ」は、行が UPDATE コマンドによって (再) 読み取られてから、UPDATE コマンドによって更新されるまでの間隔にあります。 この間隔は非常に短いため、「クロス更新」チェックは事実上無効になります。
これは、自動の「クロス更新」チェックを実質的に無効にするため、このような対話型シナリオでの UPDATE コマンドの有効かつ正しい使用とは見なされません。
- 鍵なし
UPDATE コマンドに WITH_KEY または WITH_RRN パラメーターが指定されていない場合、テーブルから読み取られた最後の行が更新されます。 これらは同等の操作です。
CHANGE FIELD(#DATDUE) TO(*DATE)
UPDATE FIELDS(#DATDUE) IN_FILE(ORDHDR) WITH_KEY(#ORDNUM
機能的には以下と同等です。
FETCH FIELDS(#DATDUE) FROM_FILE(ORDHDR) WITH_KEY(#ORDNUM)
CHANGE FIELD(#DATDUE) TO(*DATE)
UPDATE FIELDS(#DATDUE) IN_FILE(ORDHDR)
そして:
CHANGE FIELD(#QUANTITY) TO100)
UPDATE FIELDS(#QUANTITY) IN_FILE(ORDLIN) WITH_KEY(#ORDNUM)
機能的には以下と同等です。
SELECT FIELDS(#QUANTITY) FROM_FILE(ORDLIN) WITH_KEY(#ORDNUM)
CHANGE FIELD(#QUANTITY) TO100)
UPDATE FIELDS(#QUANTITY) IN_FILE(ORDLIN)
ENDSELECT
最後の 2 つの例では、注文のすべての注文明細行の #QUANTITY フィールド名が 100 に変更されることに注意してください。これは、複数行更新または「一度に設定」更新の例です。
| Note |
|---|
注意: UPDATE WITH_KEY は、同じテーブルまたはビューの選択ループ内、または選択ループ内から呼び出されるサブルーチン内で使用してはなりません。 |