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);