SQL/MX Programming Manual for C and COBOL (G06.24+, H06.03+)
Dynamic SQL With Descriptor Areas
HP NonStop SQL/MX Programming Manual for C and COBOL—523627-004
10-11
Consideration—Retrieving Multiple Values From a
Large Buffer
delete hv_emp_num;
delete hv_emp_name;
EXEC SQL CLOSE :hv_curspec;
EXEC SQL DEALLOCATE DESCRIPTOR 'out_sqlda';
EXEC SQL DEALLOCATE PREPARE :hv_sqlstmt;
return 0;
} /* main() */
void sql_error()
{
EXEC SQL BEGIN DECLARE SECTION;
char SQLSTATE[6];
long hv_num;
unsigned short hv_i;
char hv_sqlstate[6];
VARCHAR hv_tabname[129];
VARCHAR hv_colname[129];
VARCHAR hv_msgtxt[129];
EXEC SQL END DECLARE SECTION;
printf("=== EXEC SQL WHENEVER SQLERROR CONTINUE ===\n");
EXEC SQL GET DIAGNOSTICS :hv_num = NUMBER;
for (hv_i=1; hv_i <= hv_num; hv_i++){
EXEC SQL GET DIAGNOSTICS EXCEPTION :hv_i
:hv_tabname = TABLE_NAME,
:hv_colname = COLUMN_NAME,
:hv_sqlstate = RETURNED_SQLSTATE,
:hv_msgtxt = MESSAGE_TEXT;
hv_tabname[128] = '\0';
hv_colname[128] = '\0';
hv_sqlstate[5] = '\0';
hv_msgtxt[128] = '\0';
printf("Table : %s\n", hv_tabname);
printf("Column : %s\n", hv_colname);
printf("SQLSTATE : %s\n", hv_sqlstate);
printf("message : %s\n", hv_msgtxt);
} /* for */
} /* sql_error() */
Example 10-1. C VARIABLE_POINTER Example (page3of3)
C