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 COBOL523627-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