2013-02-27 58 views
0

我尝试使用下面的命令来删除队列:DROP甲骨文队列

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

它工作正常,但我想提出一个检查,如果队列不存在,我执行上面的命令THN它不应该抛出一个错误或例外。 我米用这个,但din't了我的目标:

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

它执行罚款,但不降队列。

回答

1

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

  1. 添加BEGINEND到立即执行,使用动态PL/SQL,而不是动态SQL。
  2. 使用两个单引号而不是双引号。
  3. 尽可能捕捉特定的例外,避免OTHERS。这是捕捉和忽略意外的例外。
  4. 不显示在下面,但是也许最好检查ALL_QUEUES中是否存在队列?
 
    DECLARE 
     QUEUE_DOES_NOT_EXIST EXCEPTION; 
     PRAGMA EXCEPTION_INIT(QUEUE_DOES_NOT_EXIST, -24010); 
    BEGIN 
     EXECUTE IMMEDIATE 
      'BEGIN DBMS_AQADM.DROP_QUEUE (queue_name => ''ORDVAL_QUEUE''); END;'; 
     EXCEPTION WHEN queue_does_not_exist then 
      dbms_output.put_line('Test to see if exception was thrown'); 
    END; 
    /
+0

我米能使用下面的命令没有错误丢弃队列:BEGIN DBMS_AQADM.DROP_QUEUE(queue_name => 'AV_QUEUE'); EXCEPTION 当其他人 null; END; – 2013-02-27 06:30:54

+0

如果您可以删除立即执行,那更好。但是你可能仍然想使用更具体的异常处理程序,除非你真的不关心任何潜在的错误。 – 2013-02-27 16:54:26