1

我在 Oracle 中收到此错误:

ORA-00933: SQL 命令未正确结束
DROP
SEQUENCE IF EXISTS ownername.seq_name;

为什么我会看到这个?

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 回答