Dynamic READ ...RECORD INVALID KEY not working properly in COBOL. How to fix it?

3.2k Views Asked by At

A Cobol program with file-control like so:

SELECT D-FLAT-FILE ASSIGN TO DFLAT-FILE
       ORGANIZATION IS INDEXED
       ACCESS MODE IS SEQUENTIAL 
       FILE STATUS IS RECORD-STAT
       RECORD KEY IS D_KEY OF D-FLAT-FILE DESCENDING WITH DUPLICATES.


SELECT C-MAST-FILE ASSIGN TO CMAST-FILE
       ORGANIZATION IS INDEXED
       ACCESS MODE IS DYNAMIC 
       FILE STATUS IS RECORD-STAT
       RECORD KEY IS C_KEY OF C-MAST-FILE.

reads a record from the first flat file like so:

PROCESSING.
    READ D-FLAT-FILE NEXT RECORD
        AT END ....END READ.

and reads a record on the second DYNAMIC file like so:

READ C-MAST-FILE RECORD
     INVALID KEY
     GO TO PROCESSING.

All works well except for 1 case. If the 1st record from the 1st flat file does not match any records on the 2nd dynamic file, the program goes into an infinite loop instead of doing GO TO PROCESSING. I checked the manuals, all as per manual (it is the VAX Cobol). What am I missing?

1

There are 1 best solutions below

0
On

Best practice is to use a different FILE STATUS variable for each file. In your case you haven't shown us enough context to see the problem. But if you are in a loop looking at RECORD-STAT, then it is possible that the failed read from C-MAST-FILE is giving you grief.