Use the WHENEVER instruction to define how exceptions must be handled for the rest of the module.
WHENEVER exception-class exception-action
where exception-class is one of:
{ [ANY] ERROR
| [ANY]  SQLERROR
|  NOT FOUND
|  WARNING
}
and exception-action is one of:
{ CONTINUE
| STOP
| CALL function 
| RAISE
| GOTO label
}
             The WHENEVER instruction defines the exception handling by associating an exception class with an exception action.
This code example shows a typical WHENEVER instruction usage:
WHENEVER ERROR CONTINUE DROP TABLE mytable -- SQL error will be ignored CREATE TABLE mytable ( k INT, c VARCHAR(20) ) WHENEVER ERROR STOP IF SQLCA.SQLCODE != 0 THEN ERROR "Could not create the table..." END IF
Exception classes ERROR and SQLERROR are synonyms (compatibility issue). The previous example could have used WHENEVER SQLERROR instead of WHENEVER ERROR.
Actions for classes ERROR, WARNING and NOT FOUND can be set independently:
WHENEVER ERROR STOP WHENEVER WARNING CONTINUE WHENEVER NOT FOUND GOTO not_found_handler ...
MAIN
    DEFINE x INTEGER
    WHENEVER ANY ERROR CALL error_handler
    -- WHENEVER handler takes effect
    LET x = 1/0
    DISPLAY "Back in MAIN..."
END MAIN
FUNCTION error_handler()
    DISPLAY "error_handler: ", STATUS
END FUNCTION
-- output:
error_handler:       -1202
Back in MAIN...
MAIN
    DEFINE x INTEGER
    WHENEVER ANY ERROR CONTINUE
    -- WHENEVER handler takes effect
    LET x = 1/0
    DISPLAY "WHENEVER: ", STATUS
    -- WHENEVER handler is hidden by TRY/CATCH block
    TRY
        LET x = 1/0
    CATCH
        DISPLAY "CATCH   : ", STATUS
    END TRY
    -- WHENEVER handler takes again effect
    CALL func()
END MAIN
FUNCTION func()
    DEFINE x INTEGER
    LET x = 1/0
    DISPLAY "WHENEVER: ", STATUS
END FUNCTION
-- Output:
WHENEVER:       -1202
CATCH   :       -1202
WHENEVER:       -1202
-- main.4gl
IMPORT FGL myutils
MAIN
    TRY
       -- Pass a NULL form name to get error -1110
       CALL mutils.open_form(NULL)
    CATCH
       DISPLAY "Error: ", status
    END TRY
END MAIN
-- myutils.4gl
FUNCTION open_form(fn)
    DEFINE fn STRING
    WHENEVER ERROR RAISE -- Propagate exceptions to caller
    OPEN FORM f1 FROM fn
END FUNCTION