付録 H. 複合 OCCURS DEPENDING ON

複合 OCCURS DEPENDING ON (ODO) は COBOL 85 標準の拡張としてサポートされます。

コンパイラーによって許可される複合 ODO の基本形式は、以下のとおりです。

複合 ODO によって、ディスク・スペースを節約できますが、使用が容易でなく、コードの保守を困難にする可能性があります。

以下の例は、考えられる複合 ODO のオカレンス・タイプを示しています。

01  FIELD-A.
    02 COUNTER-1                             PIC S99.
    02 COUNTER-2                             PIC S99.
    02 TABLE-1.
       03 RECORD-1 OCCURS 1 TO 5 TIMES
                   DEPENDING ON COUNTER-1    PIC X(3).
    02 EMPLOYEE-NUMBER                       PIC X(5).  1 
    02 TABLE-2 OCCURS 5 TIMES                           2 3 
               INDEXED BY INDX.                         4 
       03 TABLE-ITEM                         PIC 99.    5 
       03 RECORD-2 OCCURS 1 TO 3 TIMES
                   DEPENDING ON COUNTER-2.
          04 DATA-NUM                        PIC S99.

この例で、COUNTER-1 は、RECORD-1 の DEPENDING ON 文節のオブジェクトなので、ODO オブジェクトです。 RECORD-1 は、ODO サブジェクトと呼ばれます。 同様に、COUNTER-2 は、対応する ODO サブジェクトである RECORD-2 の ODO オブジェクトです。

上記の例に示した複合 ODO のオカレンス・タイプは、次のとおりです。
 1 
可変位置の項目: EMPLOYEE-NUMBER は、同じレベル 01 レコード内の可変長テーブルに続くデータ項目ですが、 この可変長テーブルに従属していません。
 2 
可変位置のテーブル: TABLE-2 は、同じレベル 01 レコード内の可変長テーブルに続くテーブルですが、この可変長テーブルに従属していません。
 3 
可変長エレメントを持つテーブル: TABLE-2 は、オカレンス数が ODO オブジェクトの内容によって異なる従属データ項目 RECORD-2 を含むテーブルです。
 4 
可変長エレメントを持つテーブルの指標名 INDX。
 5 
可変長エレメントを持つテーブルのエレメント TABLE-ITEM。

各レコードの可変部分の長さは、その ODO オブジェクトと、その ODO サブジェクトの長さの積です。 例えば、上記の複合 ODO 項目の 1 つへの参照を行う場合、実際の長さ (使用する場合) は以下のように計算されます。

グループ内の複合 ODO 項目を参照する前に、グループ内のすべての ODO オブジェクトを設定する必要があります。 例えば、上記のコードの EMPLOYEE-NUMBER を参照する前に、EMPLOYEE-NUMBER がその値を入手するために COUNTER-1 および COUNTER-2 に直接依存していない場合でも、 両方の ODO オブジェクトを設定する必要があります。