Как узнать, существует ли последовательность с использованием PL / SQL - PullRequest
6 голосов
/ 26 августа 2010

Мне нужно найти использование PL / SQL, если выходит определенная последовательность, например, MY_SEQ.Если последовательность существует, отбросьте ее и создайте новую, или просто создайте новую последовательность.

EG (псевдокод)

IF EXISTS(MY_SEQ) THEN
BEGIN
   DROP SEQUENCE MY_SEQ;
   CREATE SEQUENCE MY_SEQ...
END;
ELSE
BEGIN
  CREATE SEQUENCE MY_SEQ;
END;

Ответы [ 2 ]

9 голосов
/ 26 августа 2010

Вы можете проверить представление словаря ALL_SEQUENCES (или USER_SEQUENCES, если исполняющий пользователь является владельцем), например:

BEGIN
   FOR cc IN (SELECT sequence_name as sequence_exists
                FROM all_sequences
               WHERE sequence_owner = :seq_owner
                 AND sequence_name = :seq_name) LOOP
      -- sequence exists, drop it (at most there will be *one* sequence)
      EXECUTE IMMEDIATE 'DROP SEQUENCE XXX';
   END LOOP;
   -- create sequence
   EXECUTE IMMEDIATE 'CREATE SEQUENCE XXX';
END;
1 голос
/ 26 августа 2010

У меня есть несколько идей для этого (все непроверенные):

1) Oracle обычно поддерживает что-то вроде CREATE OR REPLACE

2) Используйте одно из системных представлений пользователя SYS, чтобы проверить с помощью SELECT, существует ли последовательность.

3) Используйте execute_immediate с блоком BEGIN .. EXCEPTION ... END, чтобы удалить объект. Если он не существует, должна произойти ошибка, которую можно игнорировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...