Oracle PL/SQL:如何处理DBMS_AQ.DEQUEUE的超时
我正在从PL/SQL程序调用DBMS_AQ.DEQUEUE。我不想永远等待,但如果队列中没有数据,我会在再次尝试出列之前定期超时。关于如何指定超时(使用“出列”选项中的“等待”字段),出列过程的详细信息非常清楚。但是,它没有提到在超时的情况下会发生什么Oracle PL/SQL:如何处理DBMS_AQ.DEQUEUE的超时,oracle,plsql,advanced-queuing,Oracle,Plsql,Advanced Queuing,我正在从PL/SQL程序调用DBMS_AQ.DEQUEUE。我不想永远等待,但如果队列中没有数据,我会在再次尝试出列之前定期超时。关于如何指定超时(使用“出列”选项中的“等待”字段),出列过程的详细信息非常清楚。但是,它没有提到在超时的情况下会发生什么 我本希望文档能够指定如何处理超时情况,但要么是我忽略了它,这是文档的疏忽,要么应该是显而易见的,正是我缺乏PL/SQL经验,使我不知道如何处理超时情况。在任何情况下,对于如何最好地处理/捕获出列超时的任何建议,我们都将不胜感激。对于任何其他正在寻
我本希望文档能够指定如何处理超时情况,但要么是我忽略了它,这是文档的疏忽,要么应该是显而易见的,正是我缺乏PL/SQL经验,使我不知道如何处理超时情况。在任何情况下,对于如何最好地处理/捕获出列超时的任何建议,我们都将不胜感激。对于任何其他正在寻找答案的人,我的目标是(感谢ninesided的评论):
“处理超时”是什么意思?当你拿到你的
ORA-25228
并抓到它时,你就不能再次尝试下队吗?好的,也许这已经是答案了。文档中没有提到ORA-25228。我希望它能告诉我在哪种情况下会抛出哪些异常,比如在Java文档中。我试试看。
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;