可変長配列のサポート

可変長配列は、COBOL コピーブックでは OCCURS DEPENDING ON (ODO) 文節で定義され、PL/I コピーブックでは、上限または下限 (または両方) が REFER オプションによって定義される次元属性で定義されます。

可変長配列を含むテンプレートを使用している場合には、以下の考慮事項が適用されます。
  • 1 つのレコード構造には複数の可変長配列を含めることができます。しかし、配列のサイズ (ODO または オブジェクト 参照) を定義するフィールドは、すべて最初の可変長配列パネルの前のレコードになければなりません。
  • 以下のいずれかが該当する場合、
    • (COBOL コピーブックのみ)。オブジェクトが、ODO 文節の指定範囲外にある。
    • レコード長が、オブジェクトの指定する配列項目数で計算したレコード長と一致しない。
    その後、データ・セットの編集時には、長さが誤りでレコードが選択されなかったことを示す「=LGTH」という記述が接頭部域に含められます。
  • オブジェクト・フィールドの値を変更すると、配列内の項目の数が自動的に展開または縮小されます。

    新規項目は、現行の配列の終わり (かつ、配列の後のフィールドの前) に挿入され、数値項目はゼロに初期化され、英数字項目はブランクに初期化されます。

    同様に、項目は配列の最後から削除されるので、表の最後から後のフィールドは影響を受けません。

    PL/I の場合には、配列内の項目の数は、次元属性の上限から下限を引いた値に 1 を加えることによって決定されます。REFER オプションを使用して上限と下限の両方が指定されている場合には、参照オブジェクト・フィールドのいずれかの値を変更すると、それに応じて配列項目が挿入または削除されます。

  • (COBOL コピーブックのみ)。オブジェクト・フィールドを、ODO 文節が指定する範囲外の値に変更することはできません。(FM/Db2 は、ODO の最小値 0 をサポートします。)
  • (COBOL コピーブックのみ)。新規レコードを挿入すると、レコードは ODO 定義で指定された配列項目の最小数になります。例:
    • 次の ODO 文節があるとします。
      ODO-ONE OCCURS 0 TO 10 TIMES DEPENDING ON ODO-CNTRL-ONE.
      新規レコードを挿入すると、ODO-CNTRL-ONE フィールドがゼロに初期化されて、新規レコードには ODO-ONE 配列項目は存在しません。
    • 次の ODO 文節があるとします。
      ODO-ONE OCCURS 5 TO 7 TIMES DEPENDING ON ODO-CNTRL-ONE.
      ODO-CNTRL-ONE は 5 に初期化されて、その新規レコードには 5 つの ODO-ONE 配列項目が存在します。
  • (PL/I コピーブックのみ)。新規レコードを挿入すると、そのレコードは、配列項目数がゼロになります。上限および下限の参照オブジェクト・フィールドはゼロに初期化されます。

関連するタスク