3.7 LANSA作成ファイル内の@@UPIDフィールド
LANSA(他のシステムではなく)で作成され保守される物理ファイルには、付加的なフィールドがあります。このフィールドは@@UPIDと呼ばれ、パック10進(7,0)フィールドとして定義されます。このフィールドは必ずファイルの最後にあります。
LANSAはこの@@UPIDフィールドを使用して、自動的に「相互更新」検査を行います。この検査ロジックは、以下のように非常に簡単なものです。
· レコードを読み取り、@@UPIDの値を保管します。
· 更新が要求されると、レコードを再度読み取って@@UPIDの値を保存されている@@UPIDの値と比較します。両者の値が異なっている場合は、「相互更新」エラー・メッセージが出力されます。両者の値が一致している場合は、@@UPIDに1を足してファイル・レコードを更新します。
ユーザーのアプリケーション・プログラム(LANSA以外のアプリケーション)を作成し、新規レコードを書き込んだり、LANSAで作成されたデータベース・ファイル内の既存のレコードを更新する場合は、以下の処理を行うことをお勧めします。
1. 新規レコードを書き込む際に、@@UPIDを1に設定します。
2. 既存レコードを更新する際に、@@UPIDに1を加えます。
これにより、すべてのLANSAファンクションで自動的に使用されるロジックをエミュレーションすることができます。
注: @@UPIDというフィールド名は、COBOLプログラムでは使用しないでください。
この問題を解決するには、@@UPIDフィールドのデータ・ディクショナリの定義を変更して、COBOLでも使用可能な別名を付けます(@@UPIDのデータ・ディクショナリの定義をまだ変更していない場合)。
すべてのデータベース・ファイル(まだ別名の付いていないもの)を強制的に再作成した後、COBOLプログラム内でCOPY DDオプションを使用してフィールドに別名を付けます。COBOLプログラム内では、実際の名前ではなくこの別名が使用されます。
警告: @@UPIDフィールドは、その使用方法についてLANSAから特別の指示を受けている場合を除き、4GLレベルでは使用しないでください。
注: ファイルにBLOBまたはCLOBフィールドが含まれている場合は、@@UPIDが1回のUPDATEコマンドについて複数回1が加算される場合があります。これは、主ファイルに対して1回、UPDATEコマンドに含まれている各BLOBフィールドまたはCLOBフィールドについて1回1が加えられるために発生します。
また、以下も参照してください。
『LANSA テクニカル リファレンスガイド』の「RESET_@@UPID組み込み関数」
Ýファイル