SQL/MX Programming Manual for C and COBOL (G06.24+, H06.03+)

C Sample Programs
HP NonStop SQL/MX Programming Manual for C and COBOL523627-004
A-31
Using SQL Descriptor Areas to Select SQL/MP
KANJI and KSC5601 Data
EXEC SQL WHENEVER SQLERROR GOTO errexit;
exec sql get diagnostics :num = NUMBER;
for (i=1;i<=num;i++) {
EXEC SQL get diagnostics exception :i
:hv_cond_num = CONDITION_NUMBER,
:hv_sqlstate = RETURNED_SQLSTATE,
:hv_table_name = TABLE_NAME,
:hv_column_name = COLUMN_NAME,
:hv_message_text = MESSAGE_TEXT,
:hv_sqlcode = SQLCODE;
hv_sqlstate[5] = 0;
printf("condition number: %d\n", hv_cond_num);
printf("sqlstate: %s\n", hv_sqlstate);
printf("table name: %s\n", hv_table_name);
printf("column name: %s\n", hv_column_name);
printf("message text: %s\n", hv_message_text);
printf("sqlcode: %ld\n", hv_sqlcode);
printf("\n");
}
return;
errexit:
printf("\nError in the error handler. SQLCODE = %d\n",
SQLCODE);
exit(1);
}
EXEC SQL WHENEVER SQLERROR GOTO EndOfProcessing;
EXEC SQL WHENEVER SQL_WARNING GOTO EndOfProcessing;
EXEC SQL WHENEVER NOT FOUND GOTO EndOfProcessing;
// print UCS2 string. Only characters in the range [0, 0xFF]
// are faithfully printed. Others are printed as '?'.
void print_UCS2_string(wchar_t* data, int len)
{
for ( int i=0; i<len; i++ ) {
if ( data[i] <= 0xFF )
printf("%c", (char)data[i]);
else
printf("?");
}
printf("\n");
}
// print a single-byte string.
void print_singlebyte_string(char* data, int len)
{
for ( int i=0; i<len; i++ )
printf("%c", data[i]);
printf("\n");
}
Example A-10. Using SQL Descriptor Areas to Select SQL/MP KANJI and
KSC5601 Data (page2of5)