Reading records from a VSAM file
Use the READ
statement to retrieve (READ
)
records from a file. To read a record, you must have opened the file INPUT
or I-O
.
Your program should check the file status key after each READ
.
You can retrieve records in VSAM sequential files only in the sequence in which they were written.
You can retrieve records in VSAM indexed and relative record files in any of the following ways:
- Sequentially
- According to the ascending order of the key you are using, the
RECORD KEY
or theALTERNATE RECORD KEY
, beginning at the current position of the file position indicator for indexed files, or according to ascending relative record locations for relative files - Randomly
- In any order, depending on how you set the
RECORD KEY
orALTERNATE RECORD KEY
or theRELATIVE KEY
before yourREAD
request - Dynamically
- Mixed sequential and random
With dynamic access, you can switch between reading
a specific record directly and reading records sequentially, by using READ
NEXT
for sequential retrieval and READ
for
random retrieval (by key).
When
you want to read sequentially, beginning at a specific record, use START
before
the READ NEXT
statement to set the file position
indicator to point to a particular record. When you code START
followed
by READ NEXT
, the next record is read and the file
position indicator is reset to the next record. You can move the file
position indicator randomly by using START
, but all
reading is done sequentially from that point.
START file-name KEY IS EQUAL TO ALTERNATE-RECORD-KEY
When a direct READ
is performed for
a VSAM indexed file, based on an alternate index for which duplicates
exist, only the first record in the data set (base cluster) with that
alternate key value is retrieved. You need a series of READ
NEXT
statements to retrieve each of the data set records
with the same alternate key. A
file status code of 02 is returned if there are more records with
the same alternate key value to be read; a code of 00 is returned
when the last record with that key value has been read.