Error and Status Reporting
HP NonStop SQL/MP Programming Manual for C—429847-008
9-6
Using the WHENEVER Directive
Using the WHENEVER Directive
The WHENEVER directive specifies an action that a program takes depending on the
results of subsequent DML, DCL, and DDL statements. WHENEVER provides tests for
these conditions:
ï‚·
An error occurred.
ï‚·
A warning occurred.
ï‚·
No rows were found.
When you specify a WHENEVER directive, the C compiler inserts statements that
perform run-time checking after an SQL statement using the sqlcode variable.
Table 9-1 lists the C compiler pseudocode generated to check sqlcode and the order
in which the checks are made.
action-specification is one of:
CALL :host-identifier ;
GOTO :host-identifier ;
GO TO :host-identifier;
CONTINUE ;
When more than one WHENEVER condition applies to an SQL statement, NonStop
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 CALL :row_not_found;
EXEC SQL WHENEVER SQLERROR CALL :sql_error;
EXEC SQL WHENEVER SQLWARNING CALL :sql_warning;
...
Table 9-1. C Compiler Pseudocode for Checking the sqlcode Variable
Order Condition Compiler Pseudocode
1 NOT FOUND if (sqlcode == 100) action-specification;
2 SQLERROR if (sqlcode < 0) action-specification;
3 SQLWARNING if (sqlcode > 0) && (sqlcode != 100)
action-specification;
Note. NonStop 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.