現在地: LANSA テクニカル リファレンスガイド > 3. テーブル > 3.7 LANSA作成テーブル内の@@UPID列

3.7 LANSA作成テーブル内の@@UPID列

他システムではなく、LANSA で作成され、保守される物理テーブルには付加的な列があります。この列は @@UPID と呼ばれ、10 進 (7,0) として定義されます。これは必ずテーブルの最後の列となります。

LANSA はこの @@UPID 列を使用して、自動的に「相互更新」検査を行います。この検査ロジックは、以下のように非常に簡単なものです。

  1. レコードを読み取り、@@UPID の値を保管します。
  2. 更新が要求されると、レコードを再度読み取って @@UPID の値を保存されている @@UPID の値と比較します。両者の値が異なっている場合は、「相互更新」エラー・メッセージが出力されます。両者の値が一致している場合は、@@UPID に1を足してテーブル・レコードを更新します。

ユーザーのアプリケーション・プログラム (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組み込み関数」