ORA-00933: команда SQL неправильно завершена - PullRequest
1 голос
/ 27 января 2011

Я получаю эту ошибку в Oracle:

ORA-00933: команда SQL неправильно завершена
для
УДАЛИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ, ЕСЛИ СУЩЕСТВУЕТ

Почему я это вижу?

Ответы [ 4 ]

4 голосов
/ 27 января 2011

предложение IF EXISTS не существует в команде DROP SEQUENCE в Oracle.

Вы можете использовать блок 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
1 голос
/ 27 января 2011

Как уже упоминалось, команда 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;
0 голосов
/ 27 января 2011

Попробуйте это:

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;
0 голосов
/ 27 января 2011

Проблема «если существует» не работает в Oracle.Использование:

drop sequence ownername.seq_name;
...