The ON keyword in COBOL serves multiple purposes, primarily in exception handling and conditional processing. It's used to specify actions to be taken when certain conditions occur, such as size errors in arithmetic operations, overflow conditions, or invalid key situations in file operations. It's also used in the OCCURS DEPENDING ON clause for variable table definitions.
Handle arithmetic overflow conditions
Handle string operation overflow
Handle file operation key errors
Define variable table dimensions
ADD WS-NUM-1 TO WS-RESULT
ON SIZE ERROR
DISPLAY "ARITHMETIC OVERFLOW OCCURRED"
MOVE ZERO TO WS-RESULT
NOT ON SIZE ERROR
DISPLAY "ADDITION SUCCESSFUL"
END-ADD.
MULTIPLY WS-FACTOR BY WS-VALUE
ON SIZE ERROR
DISPLAY "MULTIPLICATION OVERFLOW"
SET WS-ERROR-FLAG TO TRUE
END-MULTIPLY.Handling size errors in arithmetic operations.
DIVIDE WS-DIVIDEND BY WS-DIVISOR GIVING WS-QUOTIENT
REMAINDER WS-REMAINDER
ON SIZE ERROR
DISPLAY "DIVISION ERROR - POSSIBLE DIVIDE BY ZERO"
MOVE ZERO TO WS-QUOTIENT
MOVE ZERO TO WS-REMAINDER
NOT ON SIZE ERROR
DISPLAY "QUOTIENT: " WS-QUOTIENT
DISPLAY "REMAINDER: " WS-REMAINDER
END-DIVIDE.Division with size error handling and remainder calculation.
COMPUTE WS-RESULT = (WS-A * WS-B) + (WS-C / WS-D)
ON SIZE ERROR
DISPLAY "COMPLEX CALCULATION OVERFLOW"
PERFORM ERROR-HANDLING-ROUTINE
NOT ON SIZE ERROR
DISPLAY "CALCULATION RESULT: " WS-RESULT
END-COMPUTE.Using ON SIZE ERROR with complex COMPUTE statements.
STRING WS-FIRST-NAME DELIMITED BY SPACE
" " DELIMITED BY SIZE
WS-LAST-NAME DELIMITED BY SPACE
INTO WS-FULL-NAME
WITH POINTER WS-STRING-POINTER
ON OVERFLOW
DISPLAY "STRING TOO LONG FOR TARGET FIELD"
MOVE "NAME TRUNCATED" TO WS-ERROR-MESSAGE
NOT ON OVERFLOW
DISPLAY "FULL NAME: " WS-FULL-NAME
END-STRING.Handling overflow in STRING operations.
UNSTRING WS-INPUT-DATA
DELIMITED BY "," OR ";"
INTO WS-FIELD-1
WS-FIELD-2
WS-FIELD-3
WS-FIELD-4
WS-FIELD-5
WITH POINTER WS-DATA-POINTER
TALLYING IN WS-FIELD-COUNT
ON OVERFLOW
DISPLAY "TOO MANY FIELDS IN INPUT DATA"
DISPLAY "MAXIMUM 5 FIELDS SUPPORTED"
NOT ON OVERFLOW
DISPLAY "PARSED " WS-FIELD-COUNT " FIELDS"
END-UNSTRING.Handling overflow in UNSTRING operations when too many delimited fields exist.
READ CUSTOMER-FILE
INVALID KEY
DISPLAY "CUSTOMER NOT FOUND: " WS-CUSTOMER-ID
SET WS-RECORD-NOT-FOUND TO TRUE
NOT INVALID KEY
DISPLAY "CUSTOMER FOUND: " CUSTOMER-NAME
SET WS-RECORD-FOUND TO TRUE
END-READ.
WRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "DUPLICATE KEY ERROR"
PERFORM DUPLICATE-KEY-HANDLING
NOT INVALID KEY
DISPLAY "RECORD ADDED SUCCESSFULLY"
ADD 1 TO WS-RECORDS-ADDED
END-WRITE.Handling invalid key conditions in file operations.
REWRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "RECORD NOT FOUND FOR UPDATE"
PERFORM RECORD-NOT-FOUND-ERROR
NOT INVALID KEY
DISPLAY "RECORD UPDATED SUCCESSFULLY"
ADD 1 TO WS-RECORDS-UPDATED
END-REWRITE.
DELETE CUSTOMER-FILE RECORD
INVALID KEY
DISPLAY "RECORD NOT FOUND FOR DELETION"
SET WS-DELETE-FAILED TO TRUE
NOT INVALID KEY
DISPLAY "RECORD DELETED"
ADD 1 TO WS-RECORDS-DELETED
END-DELETE.Using INVALID KEY with REWRITE and DELETE operations.
01 TRANSACTION-RECORD.
05 TRANS-COUNT PIC 99.
05 TRANSACTION-DATA OCCURS 1 TO 50 TIMES
DEPENDING ON TRANS-COUNT.
10 TRANS-ID PIC X(10).
10 TRANS-AMOUNT PIC 9(7)V99.
10 TRANS-DATE PIC 9(8).
01 STUDENT-GRADES.
05 COURSE-COUNT PIC 99.
05 GRADE-DATA OCCURS 1 TO 20 TIMES
DEPENDING ON COURSE-COUNT.
10 COURSE-CODE PIC X(8).
10 GRADE-VALUE PIC 999.
10 CREDIT-HOURS PIC 99.
PROCEDURE DIVISION.
MOVE 5 TO TRANS-COUNT.
MOVE 12 TO COURSE-COUNT.
PERFORM VARYING WS-INDEX FROM 1 BY 1
UNTIL WS-INDEX > TRANS-COUNT
MOVE WS-INDEX TO TRANS-ID (WS-INDEX)
END-PERFORM.Using OCCURS DEPENDING ON for variable-length tables.
CALL "EXTERNAL-PROGRAM" USING
WS-INPUT-PARAMETER
WS-OUTPUT-PARAMETER
ON EXCEPTION
DISPLAY "PROGRAM CALL FAILED"
DISPLAY "PROGRAM MAY NOT BE AVAILABLE"
SET WS-CALL-FAILED TO TRUE
NOT ON EXCEPTION
DISPLAY "PROGRAM CALLED SUCCESSFULLY"
SET WS-CALL-SUCCESSFUL TO TRUE
END-CALL.
CALL WS-DYNAMIC-PROGRAM USING
WS-PARAMETERS
ON EXCEPTION
DISPLAY "DYNAMIC CALL FAILED FOR: " WS-DYNAMIC-PROGRAM
PERFORM ALTERNATIVE-PROCESSING
END-CALL.Handling exceptions in CALL statements.
PERFORM CALCULATE-COMMISSION
ON SIZE ERROR
DISPLAY "COMMISSION CALCULATION OVERFLOW"
PERFORM DEFAULT-COMMISSION-ROUTINE
END-PERFORM.
CALCULATE-COMMISSION.
MULTIPLY WS-SALES-AMOUNT BY WS-COMMISSION-RATE
GIVING WS-COMMISSION
ON SIZE ERROR
DISPLAY "BASIC COMMISSION OVERFLOW"
MOVE ZERO TO WS-COMMISSION
EXIT PARAGRAPH
END-MULTIPLY.
ADD WS-BONUS-AMOUNT TO WS-COMMISSION
ON SIZE ERROR
DISPLAY "BONUS ADDITION OVERFLOW"
SUBTRACT WS-BONUS-AMOUNT FROM WS-COMMISSION
END-ADD.Handling multiple levels of error conditions.
PROCESS-CUSTOMER-UPDATE.
READ CUSTOMER-FILE
INVALID KEY
DISPLAY "CUSTOMER NOT FOUND: " WS-CUSTOMER-ID
GO TO PROCESS-CUSTOMER-UPDATE-EXIT
END-READ.
COMPUTE WS-NEW-BALANCE = WS-OLD-BALANCE + WS-TRANSACTION-AMOUNT
ON SIZE ERROR
DISPLAY "BALANCE CALCULATION OVERFLOW"
MOVE WS-OLD-BALANCE TO WS-NEW-BALANCE
END-COMPUTE.
MOVE WS-NEW-BALANCE TO CUSTOMER-BALANCE.
REWRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "UPDATE FAILED - RECORD CHANGED"
PERFORM RECORD-CONFLICT-RESOLUTION
END-REWRITE.
PROCESS-CUSTOMER-UPDATE-EXIT.
EXIT.Combining multiple ON conditions in a single operation.
WORKING-STORAGE SECTION.
01 WS-ERROR-LOG.
05 WS-ERROR-COUNT PIC 999 VALUE ZERO.
05 WS-ERROR-DETAILS OCCURS 100 TIMES.
10 WS-ERROR-TYPE PIC X(20).
10 WS-ERROR-TIME PIC X(8).
10 WS-ERROR-DESC PIC X(50).
PROCEDURE DIVISION.
DIVIDE WS-TOTAL-SALES BY WS-CUSTOMER-COUNT
GIVING WS-AVERAGE-SALE
ON SIZE ERROR
ADD 1 TO WS-ERROR-COUNT
MOVE "SIZE ERROR" TO WS-ERROR-TYPE (WS-ERROR-COUNT)
ACCEPT WS-ERROR-TIME (WS-ERROR-COUNT) FROM TIME
MOVE "DIVISION OVERFLOW IN AVERAGE CALCULATION"
TO WS-ERROR-DESC (WS-ERROR-COUNT)
MOVE ZERO TO WS-AVERAGE-SALE
END-DIVIDE.Logging errors for audit and debugging purposes.
| Condition | When It Occurs | Typical Response |
|---|---|---|
| ON SIZE ERROR | Arithmetic result exceeds field size | Set to maximum value or zero |
| ON OVERFLOW | String operation exceeds target field | Truncate or use larger field |
| ON INVALID KEY | File record key not found | Skip operation or create record |
| ON EXCEPTION | Program call fails | Use alternative processing |
Specifies actions when conditions do NOT occur
Terminates conditional statement blocks
Table definitions using DEPENDING ON
General error and exception management