如何在Oracle AQ中清除队列

如何在Oracle AQ中清除队列,oracle,queue,jms,oracle-aq,Oracle,Queue,Jms,Oracle Aq,我第一次测试Oracle AQ。我已经设法在我创建的队列中创建了2000行测试插入 现在,我想把它们清理掉。在我自学的过程中,我把有效期定为一个月。我不能等那么久。我不认为我应该从队列表中删除它们 执行此操作的最佳方法是什么?只需在队列表上执行删除操作 没关系,只是检查了一下,然后: Oracle Streams AQ不支持对队列表或关联的索引组织表(IOT)(如果有)执行数据操作语言(DML)操作。唯一受支持的修改队列表的方法是通过提供的API。如果对队列表和IOT执行DML操作,它们可能会变

我第一次测试Oracle AQ。我已经设法在我创建的队列中创建了2000行测试插入

现在,我想把它们清理掉。在我自学的过程中,我把有效期定为一个月。我不能等那么久。我不认为我应该从队列表中删除它们

执行此操作的最佳方法是什么?

只需在队列表上执行删除操作

没关系,只是检查了一下,然后:

Oracle Streams AQ不支持对队列表或关联的索引组织表(IOT)(如果有)执行数据操作语言(DML)操作。唯一受支持的修改队列表的方法是通过提供的API。如果对队列表和IOT执行DML操作,它们可能会变得不一致,因此实际上会被破坏


因此,您必须创建一个小的PL/SQL例程来完成这些项

使用
dbms\u-aq
包。检查文档中的示例:。
向下滚动一点,有一个完整的示例。

您可以使用
DBMS\u aqadm.purge\u queue\u table
过程


解决方案

SQL看起来像这样:

-- purge queue
DECLARE
 po_t dbms_aqadm.aq$_purge_options_t;
BEGIN
  dbms_aqadm.purge_queue_table('MY_QUEUE_TABLE', NULL, po_t);
END;

我知道我无法从队列表中删除。我应该使用什么API从队列中删除消息?此解决方案与此处的示例完全相同:。对于喜欢Oracle文档的人,请参见示例8-17和8-18“清除队列表中的所有消息”工作得非常好!谢谢