SQL/MX Programming Manual for C and COBOL (G06.24+, H06.03+)
C Sample Programs
HP NonStop SQL/MX Programming Manual for C and COBOL—523627-004
A-25
Using a Dynamic SQL Cursor With Descriptor Area
void sql_error() {
EXEC SQL BEGIN DECLARE SECTION;
-- char SQLSTATE[6];
unsigned short hv_num; /* Statement info */
VARCHAR hv_cmdfcn[129];
VARCHAR hv_dynfcn[129];
unsigned short i; /* Used for condition loop */
char hv_sqlstate[6]; /* Condition info */
VARCHAR hv_tabname[129];
VARCHAR hv_colname[129];
VARCHAR hv_msgtxt[129];
EXEC SQL END DECLARE SECTION;
printf("sql_error: SQLSTATE=%s, %ld\n", SQLSTATE, SQLCODE);
exec sql whenever sqlerror continue;
EXEC SQL GET DIAGNOSTICS
:hv_num = NUMBER,
:hv_cmdfcn = COMMAND_FUNCTION,
:hv_dynfcn = DYNAMIC_FUNCTION;
printf("\nStatement: %s %s\n", hv_cmdfcn, hv_dynfcn);
for (i = 1; i <= hv_num; i++) {
EXEC SQL GET DIAGNOSTICS EXCEPTION :i
:hv_tabname = TABLE_NAME,
:hv_colname = COLUMN_NAME,
:hv_sqlstate = RETURNED_SQLSTATE,
:hv_msgtxt = MESSAGE_TEXT;
printf("Table : %s\n", hv_tabname);
printf("Column : %s\n", hv_colname);
printf("SQLSTATE: %s\n", hv_sqlstate);
printf("Message : %s\n", hv_msgtxt);
}
exit(1);
} /* end sql_error */
Example A-7. Using a Dynamic SQL Cursor With Descriptor Areas (page 8 of 8)