同じグループ内で 1 つまたは複数の非従属データ項目が後に続く可変オカレンス・テーブルのエレメント数を増加する場合には、注意が必要です。 ODO オブジェクトの値を増加し、テーブルにエレメントを追加する場合、 テーブルの後に続く可変位置データ項目に意図せずにオーバーレイしてしまう可能性があります。
このタイプのエラーを回避するには、以下のステップを行います。
以下の例で、そのエレメント数が 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 のストレージを以下のような図で示すことができます。
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 の変更済みのストレージを、以下のような図で示すことができます。
VARY-FIELD-1 の 4 番目のエレメントは、VARY-FIELD-2 の最初のエレメントにオーバーレイしていないことに注意してください。