PL / SQL:如何处理DBMS_AQ.DEQUEUE的超时

时间:2015-12-03 08:36:15

标签: oracle plsql advanced-queuing

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

我原本希望文档指定如何处理超时情况但是我忽略了它,这是一个文档疏忽或它应该是显而易见的只是我缺乏PL / SQL经验使我不知道如何做到这一点。无论如何,我们非常感谢任何有关如何最好地处理/捕获DEQUEUE超时的建议。

1 个答案:

答案 0 :(得分:2)

对于其他任何寻找答案的人来说,这就是我所追求的目标(感谢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;