Example: complex ODO
The following example illustrates the possible types of occurrence of complex 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.
Definition: In the example, COUNTER-1
is
an ODO object, that is, it is the object of the DEPENDING
ON
clause of RECORD-1
. RECORD-1
is
said to be an ODO subject. Similarly, COUNTER-2
is
the ODO object of the corresponding ODO subject, RECORD-2
.
The types of complex ODO occurrences shown in the example above are as follows:
- (1)
- A variably located item:
EMPLOYEE-NUMBER
is a data item that follows, but is not subordinate to, a variable-length table in the same level-01 record. - (2)
- A variably located table:
TABLE-2
is a table that follows, but is not subordinate to, a variable-length table in the same level-01 record. - (3)
- A table with variable-length elements:
TABLE-2
is a table that contains a subordinate data item,RECORD-2
, whose number of occurrences varies depending on the content of its ODO object. - (4)
- An index-name,
INDX
, for a table that has variable-length elements. - (5)
- An element,
TABLE-ITEM
, of a table that has variable-length elements.
How length is calculated
The length of the variable portion of each record is the product of its ODO object and the length of its ODO subject. For example, whenever a reference is made to one of the complex ODO items shown above, the actual length, if used, is computed as follows:
- The length of
TABLE-1
is calculated by multiplying the contents ofCOUNTER-1
(the number of occurrences ofRECORD-1
) by 3 (the length ofRECORD-1
). - The length of
TABLE-2
is calculated by multiplying the contents ofCOUNTER-2
(the number of occurrences ofRECORD-2
) by 2 (the length ofRECORD-2
), and adding the length ofTABLE-ITEM
. - The length of
FIELD-A
is calculated by adding the lengths ofCOUNTER-1
,COUNTER-2
,TABLE-1
,EMPLOYEE-NUMBER
, andTABLE-2
times 5.
Setting values of ODO objects
You must set every ODO object in a group item
before you reference any complex ODO item in the group. For example,
before you refer to EMPLOYEE-NUMBER
in the code above,
you must set COUNTER-1
and COUNTER-2
even
though EMPLOYEE-NUMBER
does not directly depend on
either ODO object for its value.
Restriction: An ODO object cannot be variably located.