Master Mainframe Technologies - COBOL, JCL, DB2, VSAM, CICS & More
ABEND Codes SQLCODEs File Status Interview Prep Contact
🖮 CICS

CICS File Control

Intermediate 🕑 25 min read 👁 3 views

CICS File Control

CICS provides commands to access VSAM files in an online environment. File operations are handled through FCT (File Control Table) definitions.

File Control Commands

CommandDescription
READRead a record
WRITEAdd new record
REWRITEUpdate record
DELETERemove record
STARTBRStart browse
READNEXTRead next in browse
READPREVRead previous in browse
ENDBREnd browse
RESETBRReposition browse

READ Options

  • INTO - Data area for record
  • RIDFLD - Record key field
  • KEYLENGTH - Key length
  • UPDATE - Lock for update
  • GTEQ/EQUAL - Match type

Common Response Codes

RESPMeaning
NORMALSuccessful
NOTFNDRecord not found
DUPRECDuplicate record
NOSPACENo space in file
NOTOPENFile not open
INVREQInvalid request
LENGERRLength error

Record Locking

UPDATE option locks record until:

  • REWRITE is issued
  • DELETE is issued
  • UNLOCK is issued
  • Task ends

Code Example

       WORKING-STORAGE SECTION.
       01 WS-EMP-KEY      PIC 9(6).
       01 WS-EMP-RECORD.
          05 WS-EMP-ID    PIC 9(6).
          05 WS-EMP-NAME  PIC X(30).
          05 WS-EMP-DEPT  PIC X(10).
          05 WS-SALARY    PIC 9(7)V99.
       01 WS-RESP         PIC S9(8) COMP.
       01 WS-RESP2        PIC S9(8) COMP.
       01 WS-LENGTH       PIC S9(4) COMP VALUE 53.

       PROCEDURE DIVISION.

      * READ RECORD
       READ-EMPLOYEE.
           MOVE "123456" TO WS-EMP-KEY.
           EXEC CICS READ
               FILE('EMPFILE')
               INTO(WS-EMP-RECORD)
               RIDFLD(WS-EMP-KEY)
               LENGTH(WS-LENGTH)
               RESP(WS-RESP)
               RESP2(WS-RESP2)
           END-EXEC.

           EVALUATE WS-RESP
               WHEN DFHRESP(NORMAL)
                   PERFORM DISPLAY-RECORD
               WHEN DFHRESP(NOTFND)
                   MOVE "RECORD NOT FOUND" TO WS-MESSAGE
               WHEN OTHER
                   PERFORM HANDLE-ERROR
           END-EVALUATE.

      * READ FOR UPDATE
       READ-FOR-UPDATE.
           EXEC CICS READ
               FILE('EMPFILE')
               INTO(WS-EMP-RECORD)
               RIDFLD(WS-EMP-KEY)
               LENGTH(WS-LENGTH)
               UPDATE
               RESP(WS-RESP)
           END-EXEC.

      * REWRITE RECORD
       UPDATE-EMPLOYEE.
           MOVE 80000.00 TO WS-SALARY.
           EXEC CICS REWRITE
               FILE('EMPFILE')
               FROM(WS-EMP-RECORD)
               LENGTH(WS-LENGTH)
               RESP(WS-RESP)
           END-EXEC.

      * WRITE NEW RECORD
       ADD-EMPLOYEE.
           MOVE "999999" TO WS-EMP-ID.
           MOVE "NEW EMPLOYEE" TO WS-EMP-NAME.
           EXEC CICS WRITE
               FILE('EMPFILE')
               FROM(WS-EMP-RECORD)
               RIDFLD(WS-EMP-KEY)
               LENGTH(WS-LENGTH)
               RESP(WS-RESP)
           END-EXEC.

      * DELETE RECORD
       DELETE-EMPLOYEE.
           EXEC CICS DELETE
               FILE('EMPFILE')
               RIDFLD(WS-EMP-KEY)
               RESP(WS-RESP)
           END-EXEC.

      * BROWSE RECORDS
       BROWSE-EMPLOYEES.
           MOVE "000000" TO WS-EMP-KEY.
           EXEC CICS STARTBR
               FILE('EMPFILE')
               RIDFLD(WS-EMP-KEY)
               GTEQ
               RESP(WS-RESP)
           END-EXEC.

           PERFORM UNTIL WS-RESP NOT = DFHRESP(NORMAL)
               EXEC CICS READNEXT
                   FILE('EMPFILE')
                   INTO(WS-EMP-RECORD)
                   RIDFLD(WS-EMP-KEY)
                   LENGTH(WS-LENGTH)
                   RESP(WS-RESP)
               END-EXEC
               IF WS-RESP = DFHRESP(NORMAL)
                   PERFORM DISPLAY-RECORD
               END-IF
           END-PERFORM.

           EXEC CICS ENDBR
               FILE('EMPFILE')
           END-EXEC.