レコードを定義した後に、分割されたレコードをさらに分割して、より詳しいデータ参照を行うようにできます。
たとえば、百貨店のカスタマー・ファイルの場合に、1 人のカスタマーに関するすべてのデータを 1 つのレコードに完全に収容することができるとします。 そのレコードを分割したものが、顧客名、顧客住所、顧客番号、販売部門番号、販売単価、販売金額、それまでの残高、およびその他の付随情報であったとします。
レコードの基本的な細分化項目 (それ以上分割されないフィールド) を基本項目といいます。
したがって、レコードは一連の基本項目で構成されている場合もあれば、レコードそれ自体が 1 つの基本項目である場合もあります。
一連の基本項目を参照する必要が生じた場合には、基本項目をまとめてグループ項目にすることができます。 グループ自体を組み合わせて、1 つまたは複数のサブグループを含む、より大きいグループにすることもできます。 したがって、データ項目から成る階層において、1 つの基本項目を複数のグループ項目に属させることができます。
レベル番号体系は、基本項目とグループ項目をレコードに編成する方法を指定するものです。
特殊レベル番号を使うこともでき、この番号で特殊目的に使うデータ項目が識別されます。
関連情報
レコード内のグループ項目および基本項目には、それぞれ別々の記入項目が必要であり、また各項目ごとにレベル番号を割り当てなければなりません。
レベル番号は、01 〜 49 の 1 桁または 2 桁の整数であるか、または 66、77、88 の 3 つの特殊レベル番号のうちの 1 つです。
1 つのグループ項目には、そのグループのレベル番号より小さいかあるいは等しいレベル番号が現れるまで、そのグループ項目の後ろにあるすべてのグループ項目と基本項目が含まれます。
ある 1 つのグループ項目のすぐ下にあるすべてのグループ項目と基本項目には、上のグループ項目のレベル番号より大きい同一のレベル番号を割り当てなければなりません。
タイプ名がグループ項目である場合、そのタイプ名を TYPE 文節で使用して新しいデータ項目を定義すると、 その新規データ項目には使用されたタイプ名の従属項目と同じ名前、記述、および階層を持つ項目が従属します。 新規データ項目が結果的に持つことになるレベルの数には制限がありません。 その理由を以下に示します。
関連情報
+----------------------------------IBM 拡張----------------------------------+
ILE COBOL コンパイラーでは、同じレベルの他のものと同じでない非標準レベル番号を使えます。 たとえば、次の 2 つのデータ記述記入項目は同じです。
01 EMPLOYEE-RECORD. 05 EMPLOYEE-NAME. 10 FIRST PICTURE X(10). 10 LAST PICTURE X(10). 05 EMPLOYEE-ADDRESS. 10 STREET PICTURE X(10). 10 CITY PICTURE X(10). 01 EMPLOYEE-RECORD. 05 EMPLOYEE-NAME. 10 FIRST PICTURE X(10). 10 LAST PICTURE X(10). 04 EMPLOYEE-ADDRESS. 08 STREET PICTURE X(10). 08 CITY PICTURE X(10).
04 は 05 より小さいため、EMPLOYEE-NAME の下になりませんが、他方 01 より大きいため、EMPLOYEE-RECORD の下になります。 04 の代わりに 07 を使うと、EMPLOYEE-ADDRESS は EMPLOYEE-NAME の下になります (これは、この例では望ましくありません)。
このようなコーディングは推奨されません。 また、この拡張機能は互換性のためだけに提供されています。
+------------------------------End of IBM 拡張-------------------------------+
図 4 はこの概念を表したものです。 レベル 01 の記入項目に直接従属するグループは、すべて同一のレベル番号をもっていることに注意してください。 またあるサブグループの基本項目と別のサブグループの基本項目は必ずしも同じレベル番号をもっていないこと、基本項目は階層内のどのレベルでも指定することができることに注意してください。
特別なレベル番号は、レコードの構造を作らない項目を識別します。特別レベル番号は次のとおりです。
連続するデータ記述記入項目は、先行する記入項目と同じ列で始めることも、字下げすることもできます。 字下げは、文書化するときに役立ちますが、コンパイラーの処理には影響を及ぼしません。