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)










