Мне нужно найти использование 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;
вы можете проверить представление словаря 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) Oracle обычно поддерживает что-то вроде CREATE OR REPLACE
2) Используйте одно из системных представлений пользователя SYS для проверки с помощью SELECT существует ли Последовательность.
3) Используйте execute_immediate с блоком BEGIN .. EXCEPTION ... END
, чтобы удалить объект. Если его нет, должна возникнуть ошибка, которую можно игнорировать.