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.