10 File
10 File
TO READ, UPDATE, ADD AND DELETE RECORDS IN A FILE. WRITE COMMAND - FOR KSDS --------------------THE WRITE COMMAND IS USED TO WRITE A RECORD DIRECTLY INTO A FILE BASED ON THE KEY SPECIFIED. EXEC CICS WRITE DATASET(name) | FILE(name) FROM(data-area) LENGTH(data-value) RIDFLD(data-area) END-EXEC. AEIN - DUPREC - DUPLICATE RECORD IS FOUND AEIR - NOSPACE - NO DISK SPACE IS AVAILABLE TO ADD RECORD AEIV - LENGERR - THE LENGTH SPECIFIED IS GREATER THAN MAXIMUM LENGTH SPECIFIED IN THE VSAM CLUSTER. ID DIVISION. PROGRAM-ID. KSDSW. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECT DIVISIOPY MAPSET1. 01 BANK-REC. 02 ACCNO PIC X(9). 02 ACCNA PIC X(20). 02 ACCTY PIC A. 02 ACCAM PIC 9(5). 02 FILLER PIC X(45) VALUE SPACES. 77 LEN PIC S9(4) COMP VALUE 80. 77 MSG PIC X(20). 77 LEN1 PIC S9(4) COMP VALUE 20. 77 WS-RESP PIC S9(8) USAGE COMP. 77 OP PIC A. PROCEDURE DIVISION. START-PARA. EXEC CICS SEND MAP('MAP1') MAPSET('MAPSET1') MAPONLY ERASE END-EXEC. EXEC CICS RECEIVE MAP('MAP1') MAPSET('MAPSET1') END-EXEC. MOVE ACCNOI TO ACCNO. MOVE ACCNAI TO ACCNA. MOVE ACCTYI TO ACCTY.
MOVE ACCAMI TO ACCAM. EXEC CICS WRITE DATASET( ' samfil27 ' ) FROM(BANK-REC) LENGTH(LEN) RIDFLD(ACCNO) RESP(WS-RESP) END-EXEC. IF WS-RESP = DFHRESP(DUPREC) PERFORM DUP-PARA. IF WS-RESP = DFHRESP(NOSPACE) PERFORM NOS-PARA. IF WS-RESP = DFHRESP(LENGERR) PERFORM LEN-PARA. IF WS-RESP=DFHRESP(NORMAL) EXEC CICS SEND MAP('MAP2') MAPSET('MAPSET1') MAPONLY END-EXEC. EXEC CICS RECEIVE MAP('MAP2') MAPSET('MAPSET1') END-EXEC. MOVE OPI TO OP. IF OP = 'Y' GO TO START-PARA. EXEC CICS RETURN END-EXEC. DUP-PARA. MOVE 'DUPLICATE RECORD FOUND' TO MSG1. MOVE 20 TO LEN1. EXEC CICS SEND FROM(MSG1) LENGTH(LEN1) END-EXEC. EXEC CICS RETURN END-EXEC. NOS-PARA. MOVE 'DSAD IS FULL' TO MSG1. MOVE 20 TO LEN1. EXEC CICS SEND FROM(MSG1) LENGTH(LEN1) END-EXEC. EXEC CICS RETURN END-EXEC. LEN-PARA. MOVE 'LENGTH IS NOT MATCHING' TO MSG1. MOVE 25 TO LEN1. EXEC CICS SEND FROM(MSG1) LENGTH(LEN1) END-EXEC. EXEC CICS RETURN END-EXEC. READING - KSDS
--------------------EXEC CICS READ DATASET(name) | FILE(name) INTO(data-area) LENGTH(data-value) RIDFLD(data-area) [UPDATE] (READ FOR UPDATION) END-EXEC. AEIM - NOTFND - NO RECORD WITH THE KEY SPECIFIED IS FOUND. AEIS - NOTOPEN - SPECIFIED FILE NOT OPEN AEIV - LENGERR - THE LENGTH SPECIFIED IS GREATER THAN MAXIMUM LENGTH SPECIFIED IN THE VSAM CLUSTER.
ID DIVISION. PROGRAM-ID. KSDSR. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY SAMMS27. 01 BANK-REC. 02 ACCNO PIC X(9). 02 ACCNA PIC X(20). 02 ACCTY PIC A. 02 ACCAM PIC 9(5). 02 FILLER PIC X(45). 77 LEN PIC S9(4) COMP VALUE 80. 77 MSG PIC X(20). 77 LEN1 PIC S9(4) COMP VALUE 20. 77 WS-RESP PIC S9(8) USAGE COMP. 77 OP PIC A. PROCEDURE DIVISION. START-PARA. EXEC CICS SEND MAP('MAP1') MAPSET('MAPSET1') MAPONLY ERASE END-EXEC. EXEC CICS RECEIVE MAP('MAP1') MAPSET('MAPSET1') END-EXEC. MOVE ACCNOI TO ACCNO. EXEC CICS READ DATASET ( ' SAMFIL27 ' ) INTO(BANK-REC) LENGTH(LEN) RIDFLD(ACCNO) RESP(WS-RESP) END-EXEC. IF WS-RESP = DFHRESP(NOTFND) PERFORM NFND-PARA. IF WS-RESP = DFHRESP(NOTOPEN) PERFORM NOPN-PARA.
IF WS-RESP = DFHRESP(LENGERR) PERFORM LEN-PARA. IF WS-RESP=DFHRESP(NORMAL) MOVE ACCNA TO ACCNAO MOVE ACCTY TO ACCTYO MOVE ACCAM TO ACCAMO EXEC CICS SEND MAP('MAP2') MAPSET('MAPSET1') END-EXEC. EXEC CICS SEND MAP('MAP3') MAPSET('MAPSET1') MAPONLY END-EXEC. EXEC CICS RECEIVE MAP('MAP3') MAPSET('MAPSET1') END-EXEC. MOVE OPI TO OP. IF OP = 'Y' OR OP = 'y' GO TO START-PARA. EXEC CICS RETURN END-EXEC. NFND-PARA. MOVE 'RECORD NOT FOUND' TO MSG1. MOVE 20 TO LEN. EXEC CICS SEND FROM(MSG1) LENGTH(LEN) END-EXEC. NOPN-PARA. MOVE 'FILE OPEN ERROR' TO MSG1. MOVE 20 TO LEN1. EXEC CICS SEND FROM(MSG1) LENGTH(LEN1) END-EXEC. LEN-PARA. MOVE 'LENGTH IS NOT MATCHING' TO MSG1. MOVE 20 TO LEN1. EXEC CICS SEND FROM(MSG1) LENGTH(LEN1) END-EXEC.
EXEC CICS REWRITE DATASET(name) FROM(data-area) LENGTH(data-name) END-EXEC. AEIP - INVREQ - THE REWRITE COMMAND IS ISSUED WITHOUT PRIOR READ COMMAND WITH THE UPDATE OPTION.
DATASET(name) END-EXEC. ID DIVISION. PROGRAM-ID. KSDSR. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY MAPSET1. 01 BANK-REC. 02 ACCNO PIC 9(5). 02 ACCNA PIC X(20). 02 ACCTY PIC A. 02 ACCAM PIC 9(5). 02 FILLER PIC X(41). 77 LEN PIC S9(4) COMP VALUE 80. 77 MSG PIC X(20). 77 LEN1 PIC S9(4) COMP VALUE 20. 77 WS-RESP PIC S9(8) USAGE COMP. PROCEDURE DIVISION. START-PARA. EXEC CICS SEND MAP('MAP1') MAPSET('MAPSET1') MAPONLY ERASE END-EXEC. EXEC CICS RECEIVE MAP('MAP1') MAPSET('MAPSET1') END-EXEC. MOVE ACCNOI TO ACCNO. EXEC CICS READ DATASET ( ' SAMFIL40 ' ) INTO(BANK-REC) LENGTH(LEN) RIDFLD(ACCNO) RESP(WS-RESP) UPDATE END-EXEC. IF WS-RESP = DFHRESP(NOTFND) PERFORM NFND-PARA. IF WS-RESP = DFHRESP(NOTOPEN) PERFORM NOPN-PARA. IF WS-RESP = DFHRESP(LENGERR) PERFORM LEN-PARA. IF WS-RESP=DFHRESP(NORMAL) MOVE ACCNA TO ACCNAO MOVE ACCTY TO ACCTYO MOVE ACCAM TO ACCAMO EXEC CICS SEND MAP('MAP2') MAPSET('MAPSET1') END-EXEC EXEC CICS RECEIVE MAP('MAP2') MAPSET('MAPSET1') END-EXEC MOVE ACCNAI TO ACCNA MOVE ACCTYI TO ACCTY
MOVE ACCAMI TO ACCAM EXEC CICS REWRITE DATASET ( ' SAMFIL40 ' ) FROM(BANK-REC) LENGTH(LEN) END-EXEC. EXEC CICS UNLOCK DATASET ( ' SAMFIL40 ' ) END-EXEC. EXEC CICS RETURN END-EXEC. NFND-PARA. MOVE 'RECORD NOT FOUND' TO MSG1. MOVE 20 TO LEN. EXEC CICS SEND FROM(MSG1) LENGTH(LEN) END-EXEC. NOPN-PARA. MOVE 'FILE OPEN ERROR' TO MSG1. MOVE 20 TO LEN. EXEC CICS SEND FROM(MSG1) LENGTH(LEN) END-EXEC. LEN-PARA. MOVE 'LENGTH IS NOT MATCHING' TO MSG1. MOVE 20 TO LEN. EXEC CICS SEND FROM(MSG1) LENGTH(LEN) END-EXEC.
DELETE AFTER READ WITH UPDATE OPTION EXEC CICS DELETE DATASET(name) END-EXEC. PROCEDURE DIVISION. START-PARA. EXEC CICS SEND MAP('MAP1') MAPSET('MAPSET1') MAPONLY ERASE END-EXEC. EXEC CICS RECEIVE MAP('MAP1') MAPSET('MAPSET1') END-EXEC. MOVE ACCNOI TO ACCNO. EXEC CICS READ DATASET ( ' SAMFIL40 ' )
INTO(BANK-REC) LENGTH(LEN) RIDFLD(ACCNO) RESP(WS-RESP) UPDATE END-EXEC. IF WS-RESP = DFHRESP(NOTFND) PERFORM NFND-PARA. IF WS-RESP = DFHRESP(NOTOPEN) PERFORM NOPN-PARA. IF WS-RESP = DFHRESP(LENGERR) PERFORM LEN-PARA. IF WS-RESP=DFHRESP(NORMAL) EXEC CICS DELETE DATASET ( ' SAMFI L40 ' ) END-EXEC. EXEC CICS UNLOCK DATASET ( ' SAMFIL40 ' ) END-EXEC. EXEC CICS RETURN END-EXEC.
EXEC CICS DELETE DATASET(name) RIDFLD(data-name) END-EXEC. AEIM - NOTFND - NO RECORD WITH THE KEY SPECIFIED IS FOUND.
SEQUENTIAL ACCESS SEQUENTIAL ACCESS OF VSAM FILE UNDER CICS IS CALLED "BROWSING" FOR WHICH THE FOLLOWING COMMANDS ARE AVAILABLE STARTBR TO ESTABLISH A POSITION FOR A BROWSE (SEQUENTIAL READ) OPERATION. READNEXT TO READ A NEXT RECORD (FORWARD) READPREV TO READ PREVIOUS RECORD (BACKWARD) RESETBR TO REESTABLISH ANOTHER POSITION FOR A NEW BROWSE ENDBR TO COMPLETE A BROWSE OPERATION. STARTBR -------------EXEC CICS STARTBR DATASET(name) RIDFLD(data-area) GTEQ END-EXEC.
AEIL - DSIDERR THE SPECIFIED FILE IS NOT FOUND IN FCT AEIM - NOTFND THE SPECIFIED RECORD NOT FOUND. EXEC CICS READNEXT DATASET(name) INTO(data-area) LENGTH(data-value) RIDFLD(data-area) END-EXEC. AEIT - ENDFILE THE END OF FILE IS DETECTED AEIV - LENGERR THE ACTUAL RECORD LENGTH IS GREATER THAN THE LENGTH SPECIFIED EXEC CICS READPREV DATASET(name) INTO(data-area) LENGTH(data-value) RIDFLD(data-area) END-EXEC. ID DIVISION. PROGRAM-ID. KSDSR1. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY SAMMS40. 01 BANK-REC. 02 ACCNO PIC x(9). 02 ACCNA PIC X(20). 02 ACCTY PIC A. 02 ACCAM PIC 9(5). 02 filler pic x(45). 77 EOF PIC A VALUE 'N'. 77 WS-RESP PIC S9(8) COMP. 77 LEN PIC S9(4) COMP VALUE 80. PROCEDURE DIVISION. START-PARA. MOVE '121212121' TO ACCNO. PERFORM START-BROWSE. PERFORM READ-NEXT 5 TIMES. * PERFORM READ-NEXT UNTIL EOF = "Y". PERFORM END-BROWSE. EXEC CICS RETURN END-EXEC. START-BROWSE. EXEC CICS STARTBR DATASET('SAMFIL27') RIDFLD(ACCNO) GTEQ RESP(WS-RESP) END-EXEC. IF WS-RESP = DFHRESP(NOTFND) GO TO NOTFND-PARA. READ-NEXT. EXEC CICS READNEXT DATASET('SAMFIL27') RIDFLD(ACCNO)
INTO(BANK-REC) LENGTH(LEN) RESP(WS-RESP) END-EXEC. IF WS-RESP = DFHRESP(NORMAL) MOVE ACCNO TO ACCNOO MOVE ACCNA TO ACCNAO MOVE ACCTY TO ACCTYO MOVE ACCAM TO ACCAMO EXEC CICS SEND MAP('MAP1') MAPSET('MAPSET1') ERASE END-EXEC EXEC CICS DELAY INTERVAL(4) END-EXEC. IF WS-RESP = DFHRESP(ENDFILE) MOVE 'Y' TO EOF. END-BROWSE EXEC CICS ENDBR DATASET('SAMFIL27') END-EXEC. ESDS ------EXEC CICS WRITE DATASET(name) FROM(data-area) LENGTH(dataname) RIDFLD(dataname) RBA END-EXEC.
dataname should be declared in working-storage section as 77 WS-RB PIC S9(8) COMP. FOR RANDOM READ OF AN ESDS ------------------------------------------------MOVE 160 TO WS-RB. -----> TO READ 3RD RECORD EXEC CICS READ DATASET(name) INTO(data-area) LENGTH(data-name) RIDFLD ( dataname ) ------> RIDFLD ( WS-RB) RBA END-EXEC. FOR SEQUENTIAL READ OF AN ESDS ------------------------------------------------------MOVE 160 TO WS-RB. -----> TO START FROM 3RD RECORD EXEC CICS STARTBR DATASET(name) RIDFLD(dataname) RBA EQUAL END-EXEC.
[ RIDFLD ( WS-RB ) ]
RRDS ------EXEC CICS WRITE DATASET(name) FROM(data-area) LENGTH(dataname) RIDFLD(dataname) RRN END-EXEC.
dataname should be declared in working-storage section as 77 WS-RN PIC S9(8) COMP. FOR RANDOM READ OF AN RRDS ------------------------------------------------MOVE 3 TO WS-RN. -----> TO READ 3RD RECORD EXEC CICS READ DATASET(name) INTO(data-area) LENGTH(data-name) RIDFLD ( dataname ) ------> RIDFLD ( WS-RN) RRN END-EXEC. FOR SEQUENTIAL READ OF AN RRDS ------------------------------------------------------MOVE 3 TO WS-RN. -----> TO START FROM 3RD RECORD EXEC CICS STARTBR DATASET(name) RIDFLD(dataname) RRN EQUAL END-EXEC.
[ RIDFLD ( WS-RN ) ]