Performance tuning considerations for Occurs Depending On tables

Usually the relative ordering of data item declarations does not have a significant or easily predictable impact on performance.

However, if your program contains Occurs Depending On (ODO) tables, the specific group layout of data items that follow an ODO table might lead to greatly degraded performance when accessing certain other variables.

Consider an ODO table declared as below:
01 TABLE-1.
   05 X PIC S9.
   05 Y OCCURS 3 TIMES
        DEPENDING ON X PIC X.
   05 Z PIC S9.

Because the size of item Y in TABLE-1 depends on another data-item, any subsequent non-subordinate items in the same level-01 record are variably located items, such as item Z in the previous example.

Any load or store to the variably located item Z requires additional code to be generated by the compiler to determine the location of Z based on the current value of X. If ODO tables are nested then multiple extra computations are required.

However, by always ending a record after the ODO table, all variables declared after the table will no longer be variably located and access to these variables will be much more efficient. The following example adds a new level 01 record after the ODO table and before any other variables are declared:
01 TABLE-1.
   05 X PIC S9.
   05 Y OCCURS 3 TIMES
        DEPENDING ON X PIC X.
01 WS-VARS.
   05 Z PIC S9.