The OCCURS . . . DEPENDING field attribute clause declares a variable-length, one-dimensional array.
1 – Parameters
min_number, max_number
The range for the number of occurrences.
dep_field_name
The tag variable field, whose value determines the actual number
of occurrences.
COB_index
A VAX COBOL index name.
2 – Syntax Rules
o Two unsigned integers (min_number, max_number) specify a range
for the number of occurrences; min_number specifies the minimum
number of occurrences and must be greater than or equal to zero;
max_number specifies the maximum number of occurrences and must
be greater than or equal to min_number.
o The actual number of occurrences varies according to the value of
the named field.
o The field (dep_field_name) named in the DEPENDING clause must be
an elementary field fixed in the record and not part of an array.
Its field description must precede the array field description,
and its value must never be less than min_number nor greater than
max_number. You must name the field.
o You must fully qualify the field name if it is not unique within
the record. A fully qualified field name consists of an
elementary field name preceded by the field names of as many of
its direct ancestors as you need to specify the elementary field
uniquely. Once the elementary field name is identified uniquely,
you can omit any remaining ancestors' field names. You must
separate each element of a fully qualified field name from the
next with a period.
3 – Usage Notes
o The unsigned integers min_number and max_number declare the range
for the array's upper bound; the lower bound of an array declared
with OCCURS . . . DEPENDING is always 1. If you need to specify
an array with a lower bound other than 1, use the ARRAY clause.
o If the tag variable's name is not unique within the record, none
of the ancestors in its fully qualified name can be unnamed
fields.
o Only VAX COBOL supports the INDEXED FOR COBOL BY field attribute
clause. Other processors ignore it.
o You cannot use the INDEXED FOR COBOL BY optional field attribute
clause with Version 3.0 of VAX COBOL or any earlier version. VAX
COBOL supports INDEXED FOR COBOL BY in Version 3.1 and later.
o If you use a name as a COBOL index name you cannot use that name
as a field name or COBOL-specific name elsewhere in the record
description.
4 – Example
In the following example, a variable length array defines individual
transactions within the STRUCTURE field SALES.
SALES STRUCTURE.
TRANSACTION_COUNT DATATYPE IS UNSIGNED WORD
VALID FOR DTR IF
"TRANSACTION_COUNT > 0".
TRANSACTION STRUCTURE OCCURS 1 TO 99 TIMES
DEPENDING ON
TRANSACTION_COUNT.
TRANS_DATE DATATYPE IS DATE.
ORDER_NUMBER DATATYPE IS UNSIGNED NUMERIC
SIZE IS 10 DIGITS.
AMOUNT DATATYPE IS UNSIGNED NUMERIC
SIZE IS 8 DIGITS 2 FRACTIONS
PICTURE FOR COBOL IS "9(6)V99".
END TRANSACTION STRUCTURE.
END SALES STRUCTURE.
The fully qualified field name of TRANSACTION_COUNT is
SALES.TRANSACTION_COUNT.