SQL Programming Manual for Pascal
Error and Status Processing
HP NonStop SQL Programming Manual for Pascal—528614-001
6-7
Using the WHENEVER Directive
a “no rows found” condition, and the WHENEVER NOT FOUND directive fails to detect
the condition.
Example of Using WHENEVER Directives
The program in the following example inserts two column values into the PARTS table
and checks for errors using WHENEVER directives. The WHENEVER SQLWARNING
and WHENEVER SQLERROR directives refer to parts of the program that handle the
respective condition.
{Variable Declarations:}
EXEC SQL BEGIN DECLARE SECTION ;
VAR IN_PARTS_REC: RECORD
IN_PARTNUM : INT16;
IN_PRICE : INT64;
IN_PARTDESC : FSTRING (18);
END ;
EXEC SQL END DECLARE SECTION ;
VAR SQLCODE : INT16;
{ Declare SQLCA for use with SQLCADISPLAY procedure: }
EXEC SQL INCLUDE SQLCA ;
{ Forward declare error handling code:}
PROCEDURE HANDLE_ERRORS; FORWARD;
PROCEDURE HANDLE_WARNINGS; FORWARD;
{ Specify WHENEVERS for errors and warnings:}
EXEC SQL WHENEVER SQLWARNING CALL :HANDLE_WARNINGS ;
EXEC SQL WHENEVER SQLERROR CALL :HANDLE_ERRORS ;
{ Error handling code: }
PROCEDURE HANDLE_ERRORS;
BEGIN
SQLCADISPLAY( XADDR (SQLCA) ) ;
EXEC SQL ROLLBACK WORK;
EXITPROGRAM;
END ; {HANDLE_ERRORS}
PROCEDURE HANDLE_WARNINGS;
BEGIN
WARNING_SUM := WARNING_SUM + 1;
SQLCADISPLAY ( XADDR (SQLCA),,,,'N','Y');
END ; {HANDLE_WARNINGS}
PROCEDURE PERFORM_WORK;
BEGIN;
{ Start a TMF transaction: }
EXEC SQL BEGIN WORK;
{ Do an SQL INSERT into the PARTS table: }
IN_PARTS_REC.IN_PARTNUM := 4120;
IN_PARTS_REC.IN_PRICE := 6000000
IN_PARTS_REC.IN_PARTDESC := 'V8 DISK OPTION';
EXEC SQL