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-36
Using SQL Descriptors to Select UCS2 Data
void handle_error() 
{
 EXEC SQL BEGIN DECLARE SECTION;
 long i,num, hv_cond_num,hv_sqlcode;
 char hv_sqlstate[6], hv_table_name[129],hv_column_name[129];
 char hv_message_text[256];
 EXEC SQL END DECLARE SECTION;
 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;
// 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("?");
 }
}
Example A-11. Using SQL Descriptors to Select UCS2 Data (page 2 of 5)










