ILE COBOL 解説書


可変テーブルへのエレメントの追加時のオーバーレイの防止

同じグループ内で 1 つまたは複数の非従属データ項目が後に続く可変オカレンス・テーブルのエレメント数を増加する場合には、注意が必要です。 ODO オブジェクトの値を増加し、テーブルにエレメントを追加する場合、 テーブルの後に続く可変位置データ項目に意図せずにオーバーレイしてしまう可能性があります。

このタイプのエラーを回避するには、以下のステップを行います。

  1. テーブルの後に続く可変位置データ項目を、別のデータ域に保管する。
  2. ODO オブジェクトの値を増加する。
  3. 新しいテーブル・エレメントにデータを移動する (必要な場合)。
  4. 可変位置データ項目を保管したデータ域から復元する。

以下の例で、そのエレメント数が ODO オブジェクト CONTROL-1 に依存する、テーブル VARY-FIELD-1 にエレメントを追加する必要があるとします。 VARY-FIELD-1 の後には、非従属可変位置データ項目 GROUP-ITEM-1 が続いていて、このエレメントがオーバーレイされる可能性があります。

WORKING-STORAGE SECTION.
01  VARIABLE-REC.
    05  FIELD-1                              PIC X(10).
    05  CONTROL-1                            PIC S99.
    05  CONTROL-2                            PIC S99.
    05  VARY-FIELD-1 OCCURS 1 TO 10 TIMES
          DEPENDING ON CONTROL-1             PIC X(5).
    05  GROUP-ITEM-1.
        10  VARY-FIELD-2
              OCCURS 1 TO 10 TIMES
              DEPENDING ON CONTROL-2         PIC X(9).
01  STORE-VARY-FIELD-2.
    05  GROUP-ITEM-2.
        10  VARY-FLD-2
              OCCURS 1 TO 10 TIMES
              DEPENDING ON CONTROL-2         PIC X(9).

VARY-FIELD-1 の各エレメントは 5 バイトであり、VARY-FIELD-2 の各エレメントは 9 バイトです。 CONTROL-1 と CONTROL-2 の両方に値 3 が入っている場合、VARY-FIELD-1 と VARY-FIELD-2 のストレージを以下のような図で示すことができます。



REQTEXT

VARY-FIELD-1 に 4 番目のエレメントを追加するには、VARY-FIELD-2 の最初の 5 バイトへのオーバーレイを防止するために、 以下のようにコーディングしてください。 (GROUP-ITEM-2 は、可変位置 GROUP-ITEM-1 の一時記憶域として使用します。)

MOVE GROUP-ITEM-1 TO GROUP-ITEM-2.
ADD 1 TO CONTROL-1.
MOVE five-byte-field TO
  VARY-FIELD-1 (CONTROL-1).
MOVE GROUP-ITEM-2 TO GROUP-ITEM-1.

VARY-FIELD-1 と VARY-FIELD-2 の変更済みのストレージを、以下のような図で示すことができます。



REQTEXT

VARY-FIELD-1 の 4 番目のエレメントは、VARY-FIELD-2 の最初のエレメントにオーバーレイしていないことに注意してください。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]