PL/SQL:如何处理 DBMS_AQ.DEQUEUE 的超时
PL/SQL: How to handle timeout for DBMS_AQ.DEQUEUE
我正在从 PL/SQL 程序调用 DBMS_AQ.DEQUEUE。我不想永远等待,但如果队列中没有数据,我会定期超时,然后再尝试再次出队。 DEQUEUE 过程的 Oracle documentation 清楚地说明了如何指定超时(使用 dequeue_options 中的等待字段)。但是,它确实没有提及超时时会发生什么。
我原以为文档会指定如何处理超时情况,但要么我忽略了它,这是文档疏忽,要么它应该是显而易见的,只是我缺乏 PL/SQL 经验,这让我无法做到弄清楚该怎么做。无论如何,我们将不胜感激任何有关如何最好地处理/捕获 DEQUEUE 超时的建议。
对于正在寻找此问题答案的任何其他人,这就是我所追求的(感谢 ninesided 的评论):
begin
dbms_aq.dequeue(
payload => payload
,queue_name => queue_name
,dequeue_options => deq_opt
,message_properties => msg_prty
,msgid => msgid
);
exception
when others then
if sqlcode = -25228 then
-- handle timeout here
end if;
end;
我正在从 PL/SQL 程序调用 DBMS_AQ.DEQUEUE。我不想永远等待,但如果队列中没有数据,我会定期超时,然后再尝试再次出队。 DEQUEUE 过程的 Oracle documentation 清楚地说明了如何指定超时(使用 dequeue_options 中的等待字段)。但是,它确实没有提及超时时会发生什么。
我原以为文档会指定如何处理超时情况,但要么我忽略了它,这是文档疏忽,要么它应该是显而易见的,只是我缺乏 PL/SQL 经验,这让我无法做到弄清楚该怎么做。无论如何,我们将不胜感激任何有关如何最好地处理/捕获 DEQUEUE 超时的建议。
对于正在寻找此问题答案的任何其他人,这就是我所追求的(感谢 ninesided 的评论):
begin
dbms_aq.dequeue(
payload => payload
,queue_name => queue_name
,dequeue_options => deq_opt
,message_properties => msg_prty
,msgid => msgid
);
exception
when others then
if sqlcode = -25228 then
-- handle timeout here
end if;
end;