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. 動的 SQL の代わりに動的 PL/SQL を使用するには、即時実行にBEGINandを追加します。END
  2. 二重引用符の代わりに 2 つの単一引用符を使用します。
  3. 可能であれば特定の例外をキャッチし、OTHERS. これは、予期しない例外をキャッチして無視していました。
  4. ALL_QUEUES以下に示していませんが、代わりにキューの存在を確認した方がよいでしょうか?
    宣言する
        QUEUE_DOES_NOT_EXIST EXCEPTION;
        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 に答える