Как определить, существует ли последовательность с использованием PL / SQL

Мне нужно найти использование 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;
7
задан Dave Jarvis 16 November 2017 в 01:17
поделиться

2 ответа

вы можете проверить представление словаря 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;
10
ответ дан 6 December 2019 в 22:59
поделиться

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

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

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

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

1
ответ дан 6 December 2019 в 22:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: