You can use either the queued access method or the basic access
method to add records to an indexed sequential data set. To insert
a record between existing records in the data set, you must use the
basic access method and the WRITE KN (key new) macro. Records added
to the end of a data set (that is, records with successively higher
keys), can be added to the prime data area or the overflow area by
the basic access method using WRITE KN, or they can be added to the
prime data area by the queued access method using the PUT macro.
Figure 1 shows an example of directly updating an indexed
sequential data set with variable-length records.
Figure 1. Directly Updating an Indexed Sequential Data Set with Variable-Length
Records//INDEXDD DD DSNAME=SLATE.DICT,DCB=(DSORG=IS,BUFNO=1,...),---
//TAPEDD DD ---
...
ISUPDVLR START 0
...
NEXTREC GET TPDATA,TRANAREA
CLI TRANCODE,2 Determine if replacement or
* other transaction
BL REPLACE Branch if replacement
READ DECBRW,KU,,'S','S',MF=E Read record for update
CHECK DECBRW,DSORG=IS Check exceptional conditions
CLI TRANCODE,2 Determine if change or append
BH CHANGE Branch if change
...
...
* CODE TO MOVE RECORD INTO REPLACEA+16 AND APPEND DATA FROM TRANSACTION
* RECORD
...
MVC DECBRW+6(2),REPLAREA+16 Move new length from RDW
* into DECBLGTH (DECB+6)
WRITE DECBRW,KN,,REPLAREA,MF=E Rewrite record with
* changed length
CHECK DECBRW,DSORG=IS
B NEXTREC
CHANGE ...
...
* CODE TO CHANGE FIELDS OR UPDATE FIELDS OF THE RECORD
...
WRITE DECBRW,K,MF=E Rewrite record with no
* change of length
CHECK DECBRW,DSORG=IS
B NEXTREC
REPLACE MVC DECBRW+6(2),TRANAREA Move new length from RDW
* into DECBLGTH (DECB+6)
WRITE DECBRW,KN,,TRANAREA-16,MF=E Write transaction record
* as replacement for record
* with the same key
CHECK DECBRW,DSORG=IS
B NEXTREC
CHECKERR ... SYNAD routine
...
REPLAREA DS CL272
TRANAREA DS CL4
TRANCODE DS CL1
KEY DS CL10
TRANDATA DS CL241
READ DECBRW,KU,ISDATA,'S','S',KEY,MF=L
ISDATA DCB DDNAME=INDEXDD,DSORG=IS,MACRF=(RUSC,WUAC),SYNAD=CHECKERR
TPDATA DCB ---
...