3

我正在从 PL/SQL 程序调用 DBMS_AQ.DEQUEUE。我不想永远等待,但如果队列中没有数据,我会定期超时,然后再尝试再次出队。DEQUEUE 过程的Oracle 文档清楚地说明了如何指定超时(使用 dequeue_options 中的等待字段)。但是,它确实没有提及超时情况下会发生什么。

我本来希望文档指定如何处理超时情况,但要么我忽略了它,要么是文档疏忽,要么它应该很明显,只是我缺乏 PL/SQL 经验让我不知道该怎么做。无论如何,任何关于如何最好地处理/捕获 DEQUEUE 超时的建议都将不胜感激。

4

1 回答 1

2

对于其他正在寻找答案的人来说,这就是我所追求的(感谢 Nineside 的评论):

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;
于 2015-12-04T07:27:08.373 回答