A system of level-numbers shows the organization of elementary items and group items. Since records are the most inclusive data items, level-numbers for records start at 01. Less inclusive data items are assigned higher (not necessarily successive) level-numbers not greater in value than 49. A maximum of 49 levels in a record is allowed. There are special level-numbers, 66, 77
, 78
and 88 which are exceptions to this rule (see below). Separate entries are written for each level-number used.
A group includes all group and elementary items following it until a level-number less than or equal to the level-number of that group is encountered. All items which are immediately subordinate to a given group item should be described using identical level-numbers greater than the level-number used to describe that group item
; this rule is not insisted upon
.
Example
Correct | Incorrect but Permitted |
---|---|
01 A. 05 C-1. 10 D PICTURE X. 10 E PICTURE X. 05 C-2. |
01 A. 05 C-1. 10 D PICTURE X. 10 E PICTURE X. 04 C-2. |
Four types of entries exist for which there is no true concept of level. These are:
Entries describing items by means of RENAMES clauses for the purpose of regrouping data items have been assigned the special level-number 66.
Entries that specify noncontiguous data items, which are not subdivisions of other items, and are not themselves subdivided, have been assigned the special level-number 77.
Entries that specify condition-names, to be associated with particular values of a conditional variable, have been assigned the special level-number 88.
Entries that specify constant-names, to be associated with the value of a particular literal, have been assigned the special level-number 78.
Note that indentation of COBOL source code is a readability convention only and is not part of the language.
Elementary items are by definition those items without any subordinate entries (entries without numerically greater level-numbers) following, and must have a storage definition associated with them (see the topics The PICTURE Clause and the The USAGE Clause).
Note that only elementary items (marked with an asterisk, "*", above) and FILLER items (marked with a "#" sign above) have storage explicitly reserved for them (in accordance with the associated PICTURE clause); non-elementary items have implicit storage associated with them of size determined by their subordinate items plus any FILLER bytes needed for synchronization (see the topic The SYNCHRONIZED Clause).
Level-numbers need not be consecutively ascending or descending as shown above for clarity; thus, the next subordinate level after 01 could be 05, and the next level 10, and so on.
The above data descriptions would produce storage allocation in the following manner:
where:
R-E-I | is Record-Entry-Item |
M-G-I | is Major-Group-Item |
R-G-I | is Regular-Group-Item |
S-G | is Sub-Group |
EI | is Elementary-Item |
NEI | is Noncontiguous Elementary-Item |