1

Oracleで次のエラーが発生します。

ORA-00933: DROP SEQUENCE IFEXISTSownername.seq_nameのSQLコマンドが正しく終了
していません。

なぜ私はこれを見ているのですか?

4

4 に答える 4

4

この句は、OracleIF EXISTSのコマンドには存在しません。DROP SEQUENCE

PLSQL ブロックを使用してエラーを無視できます。

SQL> DECLARE
  2     sequence_doesnt_exist EXCEPTION;
  3     PRAGMA EXCEPTION_INIT(sequence_doesnt_exist, -2289);
  4  BEGIN
  5     EXECUTE IMMEDIATE 'DROP SEQUENCE seq_name';
  6  EXCEPTION
  7     WHEN sequence_doesnt_exist THEN NULL;
  8  END;
  9  /

PL/SQL procedure successfully completed
于 2011-01-27T18:18:15.050 に答える
1

問題は、「存在する場合」が Oracle で機能しないことです。使用する:

drop sequence ownername.seq_name;
于 2011-01-27T18:18:35.870 に答える
1

他の人が述べたように、IF EXISTS は DROP SEQUENCE コマンドでは機能しません。

シーケンスの存在をテストするには、適切なビューを確認する必要があります。

USER_SEQUENCES

SELECT * 
  FROM USER_SEQUENCES
 WHERE sequence_name = ?

DBA_SEQUENCES

SELECT * 
  FROM DBA_SEQUENCES
 WHERE sequence_name = ?

ALL_SEQUENCES

SELECT * 
  FROM ALL_SEQUENCES
 WHERE sequence_name = ?

例:

BEGIN
   FOR i IN (SELECT sequence_name 
               FROM USER_SEQUENCES
              WHERE sequence_name = ?) 
   LOOP
     EXECUTE IMMEDIATE ('DROP SEQUENCE '|| i.sequence_name);
   END LOOP;
END;
于 2011-01-27T18:22:08.143 に答える
0

これを試して:

DECLARE
 iNum NUMBER DEFAULT 0;
BEGIN
  SELECT COUNT(1) 
      INTO  iNum 
   FROM ALL_SEQUENCES 
  WHERE SEQUENCE_OWNER='<OWNER_NAME>' 
       AND SEQUENCE_NAME = '<YOUR_SEQUENCE_NAME>';
 IF  iNum> 0 THEN
     EXECUTE IMMEDIATE 'DROP SEQUENCE <OWNER_NAME>.<YOUR_SEQUENCE_NAME>';
 END IF;
END;
于 2011-01-27T18:30:54.787 に答える