首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle dbms_aq.dequeue

Oracle dbms_aq.dequeue
EN

Stack Overflow用户
提问于 2021-01-15 18:59:10
回答 1查看 100关注 0票数 0

各位朋友,大家好!

环境: Windows下的Oracle 18c XE 64位。我有一个简单的点对点队列。队列状态。单一消费者。您能告诉我:在什么时刻必须从队列中删除出队消息吗?

在我的出队过程中,我没有在主事务中进行任何提交。相反,我在自治事务中处理消息并执行提交。如下所示:

代码语言:javascript
复制
procedure deq_main
as 
 procedure proc_deq (p_payload in sometype) 
 as 
 mytype sometype;
 pragma autonomous_transaction;
 begin
  ... do some work
    commit;
 end proc_deq;
begin
  dbms_aq.dequeue(...payload=> mytype,...);
  proc_deq(mytype);
end deq_main;  

deq_main过程中没有出队进程的提交。但是,消息已从队列中删除。什么意思?我是不是应该永远不要在dbms_aq.dequeue之后提交,或者这取决于某些条件?如果视情况而定,你能澄清一下,在什么情况下我必须明确承诺。

先谢谢你,安德鲁。

EN

回答 1

Stack Overflow用户

发布于 2021-01-15 20:29:03

您的出队将立即在内部将消息标记为正在进行。您必须在该事务中提交或回滚才能完成它。您可能在断开会话时提交,否则您将回滚并将消息标记为失败(这很可能会将其移动到异常队列)。

自治事务正在移除许多本应完成的隐式处理。我会完全废弃它,然后如果您的过程成功完成,消息将被标记为立即处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65734866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档