代码之家  ›  专栏  ›  技术社区  ›  jeph perro

如何在Oracle AQ中清除队列

  •  17
  • jeph perro  · 技术社区  · 14 年前

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

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

    最好的方法是什么?

    2 回复  |  直到 7 年前
        1
  •  27
  •   Yassin Hajaj    7 年前

    你可以使用 DBMS_aqadm.purge_queue_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;
    
        2
  •  2
  •   Peter Lang    8 年前

    只需删除队列表。

    没关系,只是检查了一下 that's not right :

    Oracle Streams AQ不支持对队列表或关联的索引组织表(iot)执行数据操作语言(DML)操作(如果有)。修改队列表的唯一支持方法是通过提供的api。如果对队列表和物联网执行DML操作,它们可能会变得不一致,从而有效地被破坏。


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

    使用 dbms_aq 包裹。查看文档中的示例: Dequeuing Messages . 向下滚动一点,就会有一个完整的例子。