🖮 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
| Command | Description |
|---|---|
| READ | Read a record |
| WRITE | Add new record |
| REWRITE | Update record |
| DELETE | Remove record |
| STARTBR | Start browse |
| READNEXT | Read next in browse |
| READPREV | Read previous in browse |
| ENDBR | End browse |
| RESETBR | Reposition 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
| RESP | Meaning |
|---|---|
| NORMAL | Successful |
| NOTFND | Record not found |
| DUPREC | Duplicate record |
| NOSPACE | No space in file |
| NOTOPEN | File not open |
| INVREQ | Invalid request |
| LENGERR | Length 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.