ERROR handling represents a fundamental component of robust application development in COBOL, serving as the primary mechanism for managing exceptions, processing error conditions, and implementing recovery procedures. This concept embodies defensive programming principles by providing comprehensive error detection capabilities, enabling sophisticated exception management processes, and supporting the development of resilient applications that can gracefully handle unexpected conditions and maintain operational integrity.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178IDENTIFICATION DIVISION. PROGRAM-ID. ERROR-HANDLING-DEMO. DATA DIVISION. WORKING-STORAGE SECTION. 01 ERROR-MANAGEMENT-SYSTEM. 05 ERROR-STATUS PIC X VALUE 'N'. 88 ERROR-OCCURRED VALUE 'Y'. 88 NO-ERROR VALUE 'N'. 05 ERROR-CODE PIC 9(4) VALUE 0. 05 ERROR-MESSAGE PIC X(80). 05 ERROR-SEVERITY PIC X(8). 88 SEVERITY-INFO VALUE 'INFO'. 88 SEVERITY-WARNING VALUE 'WARNING'. 88 SEVERITY-ERROR VALUE 'ERROR'. 88 SEVERITY-CRITICAL VALUE 'CRITICAL'. 01 FILE-ERROR-HANDLING. 05 FILE-STATUS-CODE PIC XX. 88 FILE-SUCCESS VALUE '00'. 88 FILE-NOT-FOUND VALUE '35'. 88 FILE-PERMISSION VALUE '37'. 88 FILE-DISK-FULL VALUE '34'. 05 FILE-ERROR-COUNT PIC 9(5) VALUE 0. 05 RECOVERY-ATTEMPTS PIC 9(2) VALUE 0. PROCEDURE DIVISION. MAIN-PROCESSING. PERFORM INITIALIZE-ERROR-SYSTEM PERFORM DEMONSTRATE-FILE-ERROR-HANDLING PERFORM DEMONSTRATE-ARITHMETIC-ERROR-HANDLING PERFORM DEMONSTRATE-CUSTOM-ERROR-HANDLING PERFORM DISPLAY-ERROR-STATISTICS STOP RUN. INITIALIZE-ERROR-SYSTEM. SET NO-ERROR TO TRUE MOVE 0 TO ERROR-CODE MOVE SPACES TO ERROR-MESSAGE SET SEVERITY-INFO TO TRUE DISPLAY 'Error handling system initialized'. DEMONSTRATE-FILE-ERROR-HANDLING. DISPLAY 'Demonstrating file error handling...' *> Simulate file operation with error handling MOVE '35' TO FILE-STATUS-CODE *> File not found PERFORM PROCESS-FILE-STATUS IF ERROR-OCCURRED PERFORM HANDLE-FILE-ERROR END-IF. PROCESS-FILE-STATUS. EVALUATE FILE-STATUS-CODE WHEN '00' SET NO-ERROR TO TRUE DISPLAY 'File operation successful' WHEN '35' SET ERROR-OCCURRED TO TRUE MOVE 1001 TO ERROR-CODE MOVE 'File not found' TO ERROR-MESSAGE SET SEVERITY-ERROR TO TRUE WHEN '37' SET ERROR-OCCURRED TO TRUE MOVE 1002 TO ERROR-CODE MOVE 'Permission denied' TO ERROR-MESSAGE SET SEVERITY-ERROR TO TRUE WHEN '34' SET ERROR-OCCURRED TO TRUE MOVE 1003 TO ERROR-CODE MOVE 'Disk full' TO ERROR-MESSAGE SET SEVERITY-CRITICAL TO TRUE WHEN OTHER SET ERROR-OCCURRED TO TRUE MOVE 1999 TO ERROR-CODE MOVE 'Unknown file error' TO ERROR-MESSAGE SET SEVERITY-ERROR TO TRUE END-EVALUATE. HANDLE-FILE-ERROR. ADD 1 TO FILE-ERROR-COUNT DISPLAY 'File Error Details:' DISPLAY 'Error Code: ' ERROR-CODE DISPLAY 'Error Message: ' ERROR-MESSAGE DISPLAY 'Severity: ' ERROR-SEVERITY IF SEVERITY-CRITICAL DISPLAY 'Critical error - terminating program' STOP RUN END-IF PERFORM ATTEMPT-ERROR-RECOVERY. ATTEMPT-ERROR-RECOVERY. ADD 1 TO RECOVERY-ATTEMPTS IF RECOVERY-ATTEMPTS < 3 DISPLAY 'Attempting recovery, attempt: ' RECOVERY-ATTEMPTS *> Implement recovery logic here DISPLAY 'Recovery attempt completed' ELSE DISPLAY 'Maximum recovery attempts reached' DISPLAY 'Manual intervention required' END-IF. DEMONSTRATE-ARITHMETIC-ERROR-HANDLING. DISPLAY 'Demonstrating arithmetic error handling...' PERFORM SAFE-DIVISION PERFORM SAFE-MULTIPLICATION. SAFE-DIVISION. *> Simulate division by zero protection COMPUTE ERROR-CODE = 100 / 0 ON SIZE ERROR SET ERROR-OCCURRED TO TRUE MOVE 2001 TO ERROR-CODE MOVE 'Division by zero attempted' TO ERROR-MESSAGE SET SEVERITY-ERROR TO TRUE DISPLAY 'Arithmetic Error: ' ERROR-MESSAGE NOT ON SIZE ERROR DISPLAY 'Division completed successfully' END-COMPUTE. SAFE-MULTIPLICATION. *> Simulate overflow protection COMPUTE ERROR-CODE = 999999 * 999999 ON SIZE ERROR SET ERROR-OCCURRED TO TRUE MOVE 2002 TO ERROR-CODE MOVE 'Arithmetic overflow occurred' TO ERROR-MESSAGE SET SEVERITY-WARNING TO TRUE DISPLAY 'Arithmetic Warning: ' ERROR-MESSAGE NOT ON SIZE ERROR DISPLAY 'Multiplication completed successfully' END-COMPUTE. DEMONSTRATE-CUSTOM-ERROR-HANDLING. DISPLAY 'Demonstrating custom error handling...' PERFORM VALIDATE-BUSINESS-RULES PERFORM HANDLE-CUSTOM-ERRORS. VALIDATE-BUSINESS-RULES. *> Simulate business rule validation SET ERROR-OCCURRED TO TRUE MOVE 3001 TO ERROR-CODE MOVE 'Business rule violation: Invalid customer type' TO ERROR-MESSAGE SET SEVERITY-WARNING TO TRUE. HANDLE-CUSTOM-ERRORS. IF ERROR-OCCURRED DISPLAY 'Custom Error Details:' DISPLAY 'Error Code: ' ERROR-CODE DISPLAY 'Error Message: ' ERROR-MESSAGE DISPLAY 'Severity: ' ERROR-SEVERITY PERFORM LOG-ERROR-TO-FILE PERFORM NOTIFY-ADMINISTRATOR END-IF. LOG-ERROR-TO-FILE. DISPLAY 'Logging error to file...' DISPLAY 'Error logged with timestamp'. NOTIFY-ADMINISTRATOR. IF SEVERITY-CRITICAL OR SEVERITY-ERROR DISPLAY 'Administrator notification sent' END-IF. DISPLAY-ERROR-STATISTICS. DISPLAY 'Error Handling Statistics:' DISPLAY 'File errors: ' FILE-ERROR-COUNT DISPLAY 'Recovery attempts: ' RECOVERY-ATTEMPTS DISPLAY 'Last error code: ' ERROR-CODE.