Change in generated COBOL PIC clause for CA Gen action block with repeating group view
search cancel

Change in generated COBOL PIC clause for CA Gen action block with repeating group view


Article ID: 205884


Updated On:


Gen Gen - Workstation Toolset Gen - Host Encyclopedia


An action block created many years ago with an Export repeating group view in it is defined as having 10000 records.  In previous versions of CA Gen, the generated COBOL programs had the array subscript variable defined as PIC 9(4) making the actual max array size to be no more than 9999 which was fine.   With CA Gen 8.6, this has changed and the generated subscript variable is now defined as PIC 9(8) for repeating groups with more than 9999 occurrences.  That's fine for all new code, but for newly generated action blocks that call older action blocks, this causes a SOC7 runtime error coming back from the called action block because of the difference in PIC clauses:  

The COBOL source code for data fields involved in the failure:                     

  000327                07  YEXPORT-GROUP-PRED-SUCC-0001MA  PIC S9(8) VALUE       

  000328                    00000000.                                             

Data field values at time of abend:                                               

  YEXPORT-GROUP-PRED-SUCC-0001MA = X'F0F0F0C140404040' *** Invalid numeric data ***


Is there a way to cause the generator to generate with the PIC 9(4) definition now rather than the PIC 9(8) one?   


Release : 8.6

Component : CA Gen Construction


Based on the situation, the only safe recommendation is to regenerate the older action block. Since the cardinality of the group view for the older action block is greater than 9999 (10,000), it can only be matched to calling action blocks with the same view size. The newer action blocks will only generate a PIC(9). To generate a PIC(4) would require a smaller cardinality and cause a mismatch and a consistency check error.

The change was deliberately made to fully support Repeating Group views greater than 9999 in cardinality.