可変長テーブル

可変長テーブルは、OCCURS 文節の形式 2 を使用して指定されます。

構文図を読む構文図をスキップする
OCCURS 文節 - 形式 2 - 可変長テーブル

>>-OCCURS--整数-1--TO--整数-2--+-------+--DEPENDING--+----+--------->
                               '-TIMES-'             '-ON-'   

>--データ名-1------------------------------------------------------->

   .---------------------------------------------------.   
   V                                                   |   
>----+-----------------------------------------------+-+------------>
     |                                  .------------. |     
     |                                  V            | |     
     '-+-ASCENDING--+--+-----+--+----+----データ名-2-+-'     
       '-DESCENDING-'  '-KEY-'  '-IS-'                   

>--+-------------------------------+-------------------------------><
   |                  .----------. |   
   |                  V          | |   
   '-INDEXED--+----+----指標名-1-+-'   
              '-BY-'                

サブジェクト項目の長さは固定されています。 可変であるのは、そのサブジェクト項目の反復回数だけです。
整数-1
最小のオカレンス数。

整数-1 の値は、ゼロかそれ以上でなければならず、 また、整数-2 の値より小さくなければなりません。

整数-2
最大オカレンス数。
データ名-1
OCCURS DEPENDING ON 文節のオブジェクト、つまり、サブジェクト項目の現行オカレンス数を表す現行値をもった (整数) データ項目を指定します。 オカレンス番号がオブジェクトの値を超える項目の内容は、予測できません。

OCCURS DEPENDING ON 文節のオブジェクトは、どのテーブルの範囲内のどの記憶位置 (すなわち、テーブルの最初の文字位置からテーブルの最後の文字位置までのすべての記憶位置) も占めてはなりません。

OCCURS DEPENDING ON 文節のオブジェクトは、位置が可変でない場合があります。 このオブジェクトは、OCCURS DEPENDING ON 文節を含んでいる項目の後に置くことはできません。

グループ項目 (あるいは、従属した OCCURS DEPENDING ON 項目を含んでいるデータ項目、 または OCCURS DEPENDING ON 項目の後にあるが、この項目に従属していないデータ項目) を参照するときには、OCCURS DEPENDING ON 文節のオブジェクトの値は、 整数-1 から整数-2 までの範囲内になければなりません。 グループの位置が可変でないとすれば、参照されるグループが CALL BY REFERENCE ステートメントで使われているときには、この規則は適用されません。

EXTERNAL 文節の入ったレコード記述記入項目に含まれるデータ記述記入項目に OCCURS 文節を指定するときは、 データ名-1 は、同じデータ部に記述された EXTERNAL 属性を持つデータ項目を参照しなければなりません。

データ記述記入項目が GLOBAL 文節の入ったものに従属するときは、 データ名-1 はグローバル名でなければならず、同じデータ部に記述されたデータ項目を参照しなければなりません。

従属 OCCURS DEPENDING ON 項目を含むグループ項目が参照される場合、 テーブル域のどの部分が処理に使用されるかは、次のように判別されます。
  • オブジェクトがグループ外にある場合は、操作の開始時にオブジェクトによって指定されるテーブル域の部分だけが使用されます。
  • オブジェクトが同一グループに含まれていて、かつグループ・データ項目が送り出し項目として参照される場合には、 操作の開始時にオブジェクトの値によって指定されるテーブル域の部分だけが操作時に使用されます。
  • オブジェクトが同一グループに含まれていて、かつグループ・データ項目が受け入れ項目として参照される場合には、 操作時にはグループ項目の最大長が使用されます。

可変長テーブルの入ったグループ項目に対して参照変更を加えると、その参照変更で参照されるデータ項目から固有データ項目が作成されます。 その参照されるデータ項目の長さは、まず前の規則を適用して判別されます。 その後、参照変更の規則が適用され、その固有データ項目の長さが判別されます。

CALL ステートメントの USING 句で引数として可変長テーブルの入ったグループ項目が使用されると、 呼び出し先プログラムの立場から見たそのパラメーターのストレージ・サイズは、その引数の渡し方によって異なります。 引数が BY REFERENCE で渡されるとき、最大サイズは、呼び出し側プログラム内の引数のデータ記述によって記述されます。 引数が BY CONTENT で渡されるとき、グループ項目は送り出し項目とみなされます。

グループ項目の後に非従属項目が続く場合、実際の長さ (最大長ではなく) が使用されます。 項目のサブジェクト (あるいは、項目のサブジェクトに従属するデータ項目、または項目のサブジェクトの上位のデータ項目) を参照するときには、OCCURS DEPENDING ON 文節のオブジェクトの値は、整数-1 から整数-2 までの範囲内になければなりません。

OCCURS 文節のサブジェクトは、 OCCURS 文節を含むデータ項目のデータ名です。OCCURS 文節のサブジェクトがタイプ名に従属する場合があります。 OCCURS 文節そのものを除いて、サブジェクトに対して使用されるデータ記述文節は、記述される項目のそれぞれのオカレンスに適用されます。

サブジェクトが SEARCH または USE FOR DEBUGGING 以外のステートメントで使用されているときはいつでも、サブジェクトが REDEFINES 文節のオブジェクトでないかぎり、添え字や指標を付ける必要があります。 この場合、サブジェクトはテーブル・エレメントの中の 1 つのオカレンスを指します。

サブジェクトが SEARCH で使用されている場合、 USE FOR DEBUGGING ステートメ ントで使用されている場合、あるいはサブジェクトが REDEFINES 文節のオブ ジェクトの場合は、添え字および指標を付けては なりません。文節。この場合、サブジェクトはテーブル・エレメント全体を表します。

上記の 2 つの制限は LENGTH OF 特殊レジスターには適用されないことに注意してください。

1 つのレコード記述記入項目では、OCCURS DEPENDING ON 文節を含む記入項目の後には、それに従属する項目またはレベル 66 の項目だけしか続けることはできません。

OCCURS DEPENDING ON 文節は、別の OCCURS 文節に従属するものとして指定することはできません。

IBM Extension
IBM Extension

複合 OCCURS DEPENDING ON は、以下のように構成されます。

  • 従属項目は OCCURS DEPENDING ON 文節を含むことができます。
  • OCCURS DEPENDING ON 文節を含む記入項目の後に、非従属項目を続けることができます。 ただし、非従属項目は、OCCURS DEPENDING ON 文節のオブジェクトであってはなりません。
  • OCCURS DEPENDING ON 文節を含む項目に続く、従属項目または非従属項目の位置は、OCCURS DEPENDING ON オブジェクトの値による影響を受けます。
  • OCCURS DEPENDING ON 文節のサブジェクトに従属する記入項目は、OCCURS DEPENDING ON 文節を含むことができます。
  • ファイル記述 (FD) 記入項目内で暗黙の再定義が使用される場合、従属レベル項目は OCCURS DEPENDING ON 文節を含むことができます。
  • OCCURS DEPENDING ON 文節を含む従属項目を持つテーブルには、INDEXED BY 句を指定することができます。

複合 OCCURS DEPENDING ON について詳しくは 付録 H. 複合 OCCURS DEPENDING ONを参照してください。

End of IBM Extension
End of IBM Extension

OCCURS 文節に使用するすべてのデータ名は修飾できますが、そのデータ名に添え字または指標を付けることはできません。

OCCURS または OCCURS DEPENDING ON 文節は、次のようなデータ記述記入項目には指定できません。
  • レベル番号 01、66、77、または 88 を持つもの。
  • 再定義されたデータ項目を記述するもの。(ただし、再定義された項目は、OCCURS 文節を含む項目に従属できます。) REDEFINES 文節を参照してください。
ASCENDING/DESCENDING および INDEXED BY 文節については 固定長テーブルで説明されています。
注: OCCURS DEPENDING ON 文節を使用する場合には、 テーブルに含まれるオカレンス数は、16,711,568 を超えてはならず、テーブル・エレメントの長さも 16,711,568 バイトを超えてはならず、 さらにテーブル全体の長さも 16,711,568 バイトを超えてはなりません。
IBM Extension
IBM Extension

複合 OCCURS DEPENDING ON は COBOL 85 標準の拡張としてサポートされます。 コンパイラーによって許可される複合 ODO の基本形式を以下に示します。

  • DEPENDING ON オプションが指定された OCCURS 文節によって記述され、 非従属エレメントまたはグループが後に続いているデータ項目 (可変位置項目)。
  • DEPENDING ON オプションが指定された OCCURS 文節によって記述され、DEPENDING ON オプションが指定された OCCURS 文節によって記述された非従属データ項目が後に続いているデータ項目 (可変位置テーブル)。
  • DEPENDING ON オプションが指定された OCCURS 文節によって記述され、DEPENDING ON オプションが指定された OCCURS 文節によって記述された別のデータ項目内でネストしているデータ項目 (可変長エレメントを持つテーブル)。
  • 可変長エレメントを持つテーブルの指標名。

複合 ODO は使用が容易でなく、コードの維持管理を困難にする可能性があります。 ディスク・スペースを節約するために使用する場合には 付録 H. 複合 OCCURS DEPENDING ONに示したガイドラインに従ってください。

End of IBM Extension
End of IBM Extension