SQL/MX Queuing and Publish/Subscribe Services
Embedded SQL Examples
HP NonStop SQL/MX Queuing and Publish/Subscribe Services—523734-002
3-14
Managing Transactions With the Stream Timeout
Attribute
 {
 exec sql begin work;
 exec sql control query default STREAM_TIMEOUT '3000';
 exec sql select a into :hv_a 
 from (delete from stream(t) 
 where a >= 0
 for skip conflict access) as t;
 exec sql commit;
 if (timed_out == TRUE)
 {
 timed_out = FALSE; /* break to outer loop */
 break;
 }
 else
 {
 printf("%d dequeued.\n", hv_a);
 }
 } /* end inner loop */
 } /* end outer loop */
 assert(0); /* Loop above should never end */
 return 0;
}
void handle_error_or_timeout() {
 EXEC SQL BEGIN DECLARE SECTION;
 long i, num, hv_cond_num, hv_sqlcode;
 char hv_sqlstate[6];
 char hv_table_name[129];
 char hv_column_name[129];
 char hv_message_text[256];
 long SQLCODE;
 EXEC SQL END DECLARE SECTION;
 EXEC SQL WHENEVER SQLERROR GOTO err_exit;
 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);










