Oracle Advance Queue-出队条件不起作用

时间:2019-02-26 10:59:01

标签: oracle oracle11g queue oracle12c

我正在尝试使用deq_condition(在Oracle Advance Queue中)使具有特定优先级的消息出队,但始终找不到消息。我尝试了以下方法:

  dequeue_options.deq_condition := 'tab.priority = 10'; 
  dequeue_options.deq_condition := 'priority = 10'; 

我还尝试过返回这样的真实条件:

  dequeue_options.deq_condition := '1 = 1'; 

,但始终找不到消息,如果删除此条件,则会收到排队的消息。有什么主意吗?

2 个答案:

答案 0 :(得分:0)

两个版本都是正确的
self.navigationController?.interactivePopGestureRecognizer?.delegate = self
extension YourVC: UIGestureRecognizerDelegate{ func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { if gestureRecognizer == self.navigationController?.interactivePopGestureRecognizer && conditionToDisableTheGesture { return false }else{ return true } } }

但是,如果您使用deq条件,则应注意dequeue_options.deq_condition := 'priority = 10';参数。 最简单的选项是在出现异常后重复出队操作。 (队列快照将被重置)。

或添加dequeue_options.deq_condition := 'tab.priority = 10';

答案 1 :(得分:0)

简单检查队列中是否为具有给定优先级的消息。用aqtab代替队列表名称

 select * from aqtab where priority = 10 order by ENQ_TIME;

您很可能不会看到消息,因为此条件priority = 10很简单地添加到执行出队的查询中。

请注意,要设置消息优先级,请使用消息属性

 l_message_properties dbms_aq.message_properties_t;

简单分配所需的优先级...

 l_message_properties.priority := 10;

...并将属性作为参数传递给DBMS_AQ.enqueue

commit之后,您应该使用上述查询在队列表中看到该消息,并且应该能够使用deq_condition

将其出队