0

我正在尝试使用以下命令删除队列:

 EXECUTE DBMS_AQADM.DROP_QUEUE (queue_name => 'ORDVAL_QUEUE'); 

它工作正常,但我想检查队列是否不存在并且我执行上面的命令,它不应该抛出错误或异常。我正在使用它,但没有得到我的目标:

 BEGIN
    EXECUTE IMMEDIATE 'DBMS_AQADM.DROP_QUEUE (queue_name => "ORDVAL_QUEUE")';
  EXCEPTION
 WHEN OTHERS THEN
  null;
  END;

它执行得很好,但不会丢弃队列。

4

1 回答 1

1

我以前没有使用过队列,但这应该会有所帮助:

  1. BEGIN将and添加END到执行立即数,以使用动态 PL/SQL 代替动态 SQL。
  2. 使用两个单引号而不是双引号。
  3. 尽可能捕获特定异常,避免OTHERS. 这是捕获并忽略意外异常。
  4. 下面没有显示,但也许最好检查队列是否存在ALL_QUEUES
    宣布
        QUEUE_DOES_NOT_EXIST 异常;
        PRAGMA EXCEPTION_INIT(QUEUE_DOES_NOT_EXIST, -24010);
    开始
        立即执行
            'BEGIN DBMS_AQADM.DROP_QUEUE (queue_name => ''ORDVAL_QUEUE''); 结尾;';
        EXCEPTION WHEN queue_does_not_exist then
            dbms_output.put_line('测试是否抛出异常');
    结尾;
    /
于 2013-02-27T06:02:39.327 回答