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