SQL/MX Queuing and Publish/Subscribe Services

Embedded SQL Examples
HP NonStop SQL/MX Queuing and Publish/Subscribe Services523734-002
3-11
Managing Transactions With the Stream Timeout
Attribute
EXEC SQL MODULE cat.sch.SHORTTRANS NAMES ARE ISO88591;
int main(int argc, char *argv[])
{
EXEC SQL BEGIN DECLARE SECTION;
int hv_a;
long SQLCODE;
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER SQLERROR CALL handle_error_or_timeout;
for (;;)
{
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;
else
printf("%d dequeued.\n", hv_a);
}
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,