SQL/MX Programming Manual for C and COBOL (G06.24+, H06.03+)
Exception Handling and Error Conditions
HP NonStop SQL/MX Programming Manual for C and COBOL—523627-004
13-12
Declaring SQLSTATE or SQLCODE in an Error
Routine
 PERFORM VARYING i FROM 1 BY 1 UNTIL i > hv-num
MOVE SPACES TO hv-msgtxt
 EXEC SQL GET DIAGNOSTICS EXCEPTION :i
 :hv-sqlstate = RETURNED_SQLSTATE,
 :hv-msgtxt = MESSAGE_TEXT
 END-EXEC.
 DISPLAY "SQLSTATE: " hv-sqlstate
 DISPLAY "Message : " hv-msgtxt
 END-PERFORM.
 MOVE saved-sqlstate TO sqlstate.
...
END PROGRAM Program-exF72.
For information on using the GET DIAGNOSTICS Statement, see Accessing and Using 
the Diagnostics Area on page 13-13.
Declaring SQLSTATE or SQLCODE in an Error Routine
As described in Saving and Restoring SQLSTATE or SQLCODE on page 13-10, you 
can save and restore SQLSTATE or SQLCODE within the SQL error function. 
Alternately, in a C program, you can declare SQLSTATE in the function (in addition to 
declaring SQLSTATE in the main routine).
Example
This example program has two SQL Declare Sections, both of which contain an 
SQLSTATE declaration:
void sql_error(void);
...
int main ()
{ 
 ...
EXEC SQL BEGIN DECLARE SECTION;
 char SQLSTATE[6];
 ...
EXEC SQL END DECLARE SECTION;
...
EXEC SQL WHENEVER SQLERROR CALL sql_error;
...
EXEC SQL OPEN get_by_partnum; 
EXEC SQL FETCH get_by_partnum 
 INTO :hv_partnum,:hv_partdesc,:hv_price,:hv_qty_available;
...
while (strcmp(SQLSTATE, SQLSTATE_OK) == 0) { 
 if ( hv_qty_available < 1000 ) 
 EXEC SQL UPDATE parts 
 SET qty_available = qty_available + 100
 WHERE CURRENT OF get_by_partnum;
 ...
 EXEC SQL FETCH get_by_partnum 
 INTO :hv_partnum,:hv_partdesc,:hv_price,:hv_qty_available;
}
...
C










