2013-02-27 115 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