SQL/MP Programming Manual for COBOL85

Error and Status Reporting
HP NonStop SQL/MP Programming Manual for COBOL85429326-004
9-7
Using the WHENEVER Directive
When more than one WHENEVER condition applies to an SQL statement, SQL/MP
processes the conditions in order of precedence. For example, an SQL error and an
SQL warning can occur for the same statement, but the error condition has a higher
precedence and is processed first.
These WHENEVER directives check for the error, warning, and not-found conditions:
EXEC SQL
WHENEVER NOT FOUND PERFORM :ROW-NOT-FOUND-7000 END-EXEC.
EXEC SQL
WHENEVER SQLERROR PERFORM :SQL-ERROR-9000 END-EXEC.
EXEC SQL
WHENEVER SQLWARNING PERFORM :SQL-WARNING-8000 END-EXEC.
...
Determining the Scope of a WHENEVER Directive
The order in which WHENEVER directives appear in the listing determines their scope.
Some considerations follow:
A WHENEVER directive remains in effect until another WHENEVER directive for
the same condition appears. If you want to execute a different routine when an
error occurs, specify a new WHENEVER directive with a different PERFORM
routine.
For example, to insert a new row only when a row is not found, specify a new
WHENEVER directive as follows:
EXEC SQL WHENEVER NOT FOUND PERFORM :INSERT-ROW END-EXEC.
The new WHENEVER directive remains in effect until it is disabled or changed.
If another program is called within the error handling code, the position of the
called program in the listing order determines the WHENEVER directive in effect;
the context of the calling program has no effect.
The listing order includes files copied into the program through a SOURCE
directive. If a copied file contains a WHENEVER directive, that directive is in effect
following the SOURCE directive.
SQL statements are not affected by the WHENEVER directive if they appear in the
program before the WHENEVER directive enables condition checking.
Do not code WHENEVER directives inside IF statements. A COBOL terminator on
a WHENEVER directive or any other nonexecutable statement, such as DECLARE
CURSOR or CONTROL statement, does not affect execution.
Note. SQL/MP sometimes returns values other than 100 for a not-found condition. For
example, SQL error 8230 indicates that a subquery did not return any rows, and SQL error
8423 indicates that an indicator variable was not specified for a null output value.