The WHENEVER ERROR statement
Since program statements that access the database may be expected to fail
occasionally (the row is locked, etc.) the WHENEVER ERROR statement can be
used to handle this type of error.
By default, when a runtime error occurs the program will stop. To prevent this happening when SQL
statements that access the database fail, surround the SQL statement with
WHENEVER ERROR statements, as in this example based on the
fetch_cust function in the custquery.4gl
program module:
01 IF (p_fetch_flag = 1) THEN
02 WHENEVER ERROR CONTINUE
03 FETCH NEXT cust_curs
04 INTO mr_custrec.*
05 WHENEVER ERROR STOP
06 ...
WHENEVER ERROR statements are modular in scope, and generate additional code for
exception handling when the module is compiled. This exception handling is valid until
the end of the module or until a new WHENEVER ERROR instruction is
encountered by the compiler.
When the example code is compiled, WHENEVER ERROR CONTINUE will generate code to
prevent the program from stopping if the FETCH statement fails.
Immediately after the FETCH statement, the WHENEVER ERROR
STOP instruction will generate the code to reset the default behavior for
the rest of the module.
You can write your own error function to handle SQL errors, and use the WHENEVER ERROR
CALL <function-name> syntax to activate it.
Runtime errors may be logged to an error log.