COBOL STATUS Clause - Quick Reference
The STATUS clause in COBOL is used to specify a file status field that will contain status codes indicating the result of file operations. It provides a standardized way to handle file operation errors and determine program flow based on operation results.
Primary Use
Specify file status fields for error handling
Division
DATA DIVISION
Section
FILE SECTION
Status
Optional clause
Overview
The STATUS clause is part of the file description entry (FD) in the FILE SECTION of the DATA DIVISION. It allows you to specify a field that will contain status codes after file operations. These status codes provide information about whether the operation was successful or what type of error occurred. This is essential for proper error handling and program flow control in COBOL applications.
Syntax
12345678910111213141516171819202122DATA DIVISION. FILE SECTION. FD file-name [RECORD IS STANDARD] [BLOCK CONTAINS integer RECORDS] [RECORDING MODE IS mode] [LABEL RECORDS ARE STANDARD] [VALUE OF file-id IS literal] [STATUS field-name]. * Examples: FD CUSTOMER-FILE RECORD IS STANDARD BLOCK CONTAINS 10 RECORDS RECORDING MODE IS F LABEL RECORDS ARE STANDARD STATUS WS-CUSTOMER-STATUS. FD INVENTORY-FILE RECORD IS STANDARD RECORDING MODE IS F STATUS WS-INVENTORY-STATUS.
Practical Examples
Basic STATUS Usage
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354* Basic STATUS clause example IDENTIFICATION DIVISION. PROGRAM-ID. STATUS-EXAMPLE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "CUSTOMER.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-CUSTOMER-STATUS. DATA DIVISION. FILE SECTION. FD CUSTOMER-FILE RECORD IS STANDARD RECORDING MODE IS F STATUS WS-CUSTOMER-STATUS. 01 CUSTOMER-RECORD. 05 CUST-ID PIC 9(5). 05 CUST-NAME PIC X(30). 05 CUST-BALANCE PIC 9(7)V99. WORKING-STORAGE SECTION. 01 WS-CUSTOMER-STATUS PIC X(2). PROCEDURE DIVISION. MAIN-LOGIC. OPEN INPUT CUSTOMER-FILE * Check if file opened successfully IF WS-CUSTOMER-STATUS = "00" DISPLAY "File opened successfully" PERFORM READ-CUSTOMERS CLOSE CUSTOMER-FILE ELSE DISPLAY "Error opening file: " WS-CUSTOMER-STATUS END-IF STOP RUN. READ-CUSTOMERS. READ CUSTOMER-FILE AT END DISPLAY "End of file reached" NOT AT END * Check if read was successful IF WS-CUSTOMER-STATUS = "00" DISPLAY "Customer: " CUST-ID " - " CUST-NAME ELSE DISPLAY "Error reading record: " WS-CUSTOMER-STATUS END-IF END-READ.
Explanation: This example demonstrates basic usage of the STATUS clause. The program defines a file with a status field (WS-CUSTOMER-STATUS) and checks the status after each file operation. The status code "00" indicates success, while other codes indicate various error conditions. This allows the program to handle errors gracefully and provide appropriate feedback to the user.
Error Handling with STATUS
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576* STATUS clause with comprehensive error handling IDENTIFICATION DIVISION. PROGRAM-ID. STATUS-ERROR-HANDLING. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INVENTORY-FILE ASSIGN TO "INVENTORY.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS RANDOM RECORD KEY IS INV-ITEM-ID FILE STATUS IS WS-INVENTORY-STATUS. DATA DIVISION. FILE SECTION. FD INVENTORY-FILE RECORD IS STANDARD RECORDING MODE IS F STATUS WS-INVENTORY-STATUS. 01 INVENTORY-RECORD. 05 INV-ITEM-ID PIC 9(5). 05 INV-DESCRIPTION PIC X(40). 05 INV-QUANTITY PIC 9(4). 05 INV-PRICE PIC 9(5)V99. WORKING-STORAGE SECTION. 01 WS-INVENTORY-STATUS PIC X(2). 01 WS-ERROR-MESSAGE PIC X(50). PROCEDURE DIVISION. MAIN-LOGIC. OPEN I-O INVENTORY-FILE PERFORM CHECK-FILE-STATUS "OPEN" * Try to read a specific record MOVE 12345 TO INV-ITEM-ID READ INVENTORY-FILE PERFORM CHECK-FILE-STATUS "READ" * Try to write a new record MOVE 99999 TO INV-ITEM-ID MOVE "NEW ITEM" TO INV-DESCRIPTION MOVE 100 TO INV-QUANTITY MOVE 25.50 TO INV-PRICE WRITE INVENTORY-RECORD PERFORM CHECK-FILE-STATUS "WRITE" CLOSE INVENTORY-FILE PERFORM CHECK-FILE-STATUS "CLOSE" STOP RUN. CHECK-FILE-STATUS. USING OPERATION-TYPE. EVALUATE WS-INVENTORY-STATUS WHEN "00" DISPLAY OPERATION-TYPE " operation successful" WHEN "10" DISPLAY "End of file reached during " OPERATION-TYPE WHEN "23" DISPLAY "Record not found during " OPERATION-TYPE WHEN "30" DISPLAY "Permanent error during " OPERATION-TYPE WHEN "35" DISPLAY "File not found during " OPERATION-TYPE WHEN "37" DISPLAY "File access denied during " OPERATION-TYPE WHEN "39" DISPLAY "File already exists during " OPERATION-TYPE WHEN "41" DISPLAY "File already open during " OPERATION-TYPE WHEN OTHER DISPLAY "Unknown status " WS-INVENTORY-STATUS " during " OPERATION-TYPE END-EVALUATE.
Explanation: This example shows comprehensive error handling using the STATUS clause. The program defines a subroutine (CHECK-FILE-STATUS) that evaluates different status codes and provides specific error messages for each condition. This approach allows for detailed error reporting and helps in debugging file operation issues. The EVALUATE statement makes the code more readable and maintainable compared to multiple IF statements.
Multiple Files with STATUS
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119* STATUS clause with multiple files IDENTIFICATION DIVISION. PROGRAM-ID. MULTIPLE-FILES-STATUS. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO "INPUT.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-INPUT-STATUS. SELECT OUTPUT-FILE ASSIGN TO "OUTPUT.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-OUTPUT-STATUS. SELECT ERROR-FILE ASSIGN TO "ERROR.DAT" ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS WS-ERROR-STATUS. DATA DIVISION. FILE SECTION. FD INPUT-FILE RECORD IS STANDARD RECORDING MODE IS F STATUS WS-INPUT-STATUS. 01 INPUT-RECORD. 05 INPUT-ID PIC 9(5). 05 INPUT-DATA PIC X(50). FD OUTPUT-FILE RECORD IS STANDARD RECORDING MODE IS F STATUS WS-OUTPUT-STATUS. 01 OUTPUT-RECORD. 05 OUTPUT-ID PIC 9(5). 05 OUTPUT-DATA PIC X(50). FD ERROR-FILE RECORD IS STANDARD RECORDING MODE IS F STATUS WS-ERROR-STATUS. 01 ERROR-RECORD. 05 ERROR-ID PIC 9(5). 05 ERROR-MESSAGE PIC X(50). WORKING-STORAGE SECTION. 01 WS-INPUT-STATUS PIC X(2). 01 WS-OUTPUT-STATUS PIC X(2). 01 WS-ERROR-STATUS PIC X(2). 01 WS-EOF-FLAG PIC X VALUE 'N'. 88 END-OF-FILE VALUE 'Y'. PROCEDURE DIVISION. MAIN-LOGIC. * Open all files OPEN INPUT INPUT-FILE IF WS-INPUT-STATUS NOT = "00" DISPLAY "Error opening input file: " WS-INPUT-STATUS STOP RUN END-IF OPEN OUTPUT OUTPUT-FILE IF WS-OUTPUT-STATUS NOT = "00" DISPLAY "Error opening output file: " WS-OUTPUT-STATUS CLOSE INPUT-FILE STOP RUN END-IF OPEN OUTPUT ERROR-FILE IF WS-ERROR-STATUS NOT = "00" DISPLAY "Error opening error file: " WS-ERROR-STATUS CLOSE INPUT-FILE OUTPUT-FILE STOP RUN END-IF * Process records PERFORM UNTIL END-OF-FILE READ INPUT-FILE AT END SET END-OF-FILE TO TRUE NOT AT END IF WS-INPUT-STATUS = "00" PERFORM PROCESS-RECORD ELSE PERFORM LOG-ERROR END-IF END-READ END-PERFORM * Close all files CLOSE INPUT-FILE OUTPUT-FILE ERROR-FILE STOP RUN. PROCESS-RECORD. * Validate input record IF INPUT-ID > 0 AND INPUT-DATA NOT = SPACES MOVE INPUT-ID TO OUTPUT-ID MOVE INPUT-DATA TO OUTPUT-DATA WRITE OUTPUT-RECORD IF WS-OUTPUT-STATUS NOT = "00" PERFORM LOG-ERROR END-IF ELSE PERFORM LOG-ERROR END-IF. LOG-ERROR. MOVE INPUT-ID TO ERROR-ID MOVE "Invalid record or write error" TO ERROR-MESSAGE WRITE ERROR-RECORD IF WS-ERROR-STATUS NOT = "00" DISPLAY "Error writing to error file: " WS-ERROR-STATUS END-IF.
Explanation: This example demonstrates using STATUS clauses with multiple files. Each file has its own status field, allowing the program to track the status of operations on each file independently. The program opens all files and checks their status before proceeding. If any file fails to open, the program closes previously opened files and stops. During processing, the program checks the status after each operation and logs errors to a separate error file. This approach ensures robust error handling across multiple file operations.
Status Code Validation
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119* STATUS clause with status code validation IDENTIFICATION DIVISION. PROGRAM-ID. STATUS-VALIDATION. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT MASTER-FILE ASSIGN TO "MASTER.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS MST-KEY ALTERNATE RECORD KEY IS MST-ALT-KEY FILE STATUS IS WS-MASTER-STATUS. DATA DIVISION. FILE SECTION. FD MASTER-FILE RECORD IS STANDARD RECORDING MODE IS F STATUS WS-MASTER-STATUS. 01 MASTER-RECORD. 05 MST-KEY PIC 9(5). 05 MST-ALT-KEY PIC X(10). 05 MST-DATA PIC X(100). WORKING-STORAGE SECTION. 01 WS-MASTER-STATUS PIC X(2). 01 WS-STATUS-DETAILS. 05 WS-STATUS-1 PIC X. 05 WS-STATUS-2 PIC X. PROCEDURE DIVISION. MAIN-LOGIC. OPEN I-O MASTER-FILE PERFORM VALIDATE-STATUS "OPEN" * Try various operations and validate status PERFORM TEST-READ-OPERATION PERFORM TEST-WRITE-OPERATION PERFORM TEST-DELETE-OPERATION PERFORM TEST-START-OPERATION CLOSE MASTER-FILE PERFORM VALIDATE-STATUS "CLOSE" STOP RUN. VALIDATE-STATUS. USING OPERATION-TYPE. * Split status code for detailed analysis MOVE WS-MASTER-STATUS TO WS-STATUS-DETAILS * Check first digit (major category) EVALUATE WS-STATUS-1 WHEN "0" DISPLAY OPERATION-TYPE " successful" WHEN "1" DISPLAY OPERATION-TYPE " - End of file or invalid key" WHEN "2" DISPLAY OPERATION-TYPE " - Record not found or duplicate" WHEN "3" DISPLAY OPERATION-TYPE " - Permanent error" WHEN "4" DISPLAY OPERATION-TYPE " - Logic error" WHEN "9" DISPLAY OPERATION-TYPE " - Implementation-specific error" WHEN OTHER DISPLAY OPERATION-TYPE " - Unknown status category" END-EVALUATE * Check second digit (specific error) EVALUATE WS-STATUS-2 WHEN "0" DISPLAY " Specific: No additional information" WHEN "1" DISPLAY " Specific: File not found" WHEN "2" DISPLAY " Specific: File already exists" WHEN "3" DISPLAY " Specific: File access denied" WHEN "4" DISPLAY " Specific: File already open" WHEN "5" DISPLAY " Specific: File not open" WHEN "6" DISPLAY " Specific: File position error" WHEN "7" DISPLAY " Specific: File structure error" WHEN "8" DISPLAY " Specific: File system error" WHEN "9" DISPLAY " Specific: Implementation-specific" WHEN OTHER DISPLAY " Specific: Unknown error code" END-EVALUATE. TEST-READ-OPERATION. MOVE 12345 TO MST-KEY READ MASTER-FILE PERFORM VALIDATE-STATUS "READ". TEST-WRITE-OPERATION. MOVE 99999 TO MST-KEY MOVE "TEST-KEY" TO MST-ALT-KEY MOVE "Test data for new record" TO MST-DATA WRITE MASTER-RECORD PERFORM VALIDATE-STATUS "WRITE". TEST-DELETE-OPERATION. MOVE 99999 TO MST-KEY DELETE MASTER-FILE PERFORM VALIDATE-STATUS "DELETE". TEST-START-OPERATION. MOVE 12345 TO MST-KEY START MASTER-FILE KEY IS GREATER THAN MST-KEY PERFORM VALIDATE-STATUS "START".
Explanation: This example shows detailed status code validation by breaking down the two-character status code into its components. The first digit indicates the major category (success, end of file, record not found, permanent error, etc.), while the second digit provides more specific information about the error. This approach allows for very detailed error analysis and helps in debugging complex file operation issues. The program tests various file operations and provides detailed feedback about each operation's result.
Best Practices and Considerations
Important Considerations
- Always check status codes after file operations
- Use descriptive names for status fields
- Handle all possible status codes, not just success
- Consider creating status validation subroutines
- Document status code meanings for your application
Advantages
- Provides standardized error handling
- Enables detailed error analysis
- Improves program reliability
- Facilitates debugging and maintenance
- Supports multiple file operations
Limitations
- Status codes may vary between implementations
- Requires additional code for error handling
- May not provide detailed error information
- Status field must be defined for each file
- Can add complexity to simple programs
Best Practices
- • Always check status codes after file operations
- • Use consistent naming conventions for status fields
- • Create reusable status validation subroutines
- • Handle all possible error conditions
- • Document status code meanings and handling
Test Your Knowledge
1. What is the primary purpose of the STATUS clause in COBOL?
- To define file names
- To specify file status fields for error handling
- To set file permissions
- To define file organization
2. In which COBOL division is the STATUS clause typically used?
- IDENTIFICATION DIVISION
- ENVIRONMENT DIVISION
- DATA DIVISION
- PROCEDURE DIVISION
3. What data type is typically used for STATUS fields?
- PIC 9(2)
- PIC X(2)
- PIC 9(4)
- PIC X(4)
4. What does a status code of "00" typically indicate?
- File not found
- Successful operation
- File access denied
- End of file
5. Can the STATUS clause be used with all file organization types?
- No, only with sequential files
- Yes, with all file organization types
- Only with indexed files
- Only with relative files
Related Concepts
FILE SECTION
Section for defining file structures and characteristics
File Processing
Techniques for reading, writing, and manipulating files
Error Handling
Methods for handling program errors and exceptions
File Organization
Different ways to organize file data
File Status Error Handling
Specific techniques for handling file status errors