Я пытаюсь создать сценарий выпуска, который можно развернуть в нескольких базах данных, но где данные могут быть объединены вместе позднее. Очевидный способ справиться с этим - установить порядковые номера для производственных данных достаточно высокими в последующих развертываниях, чтобы предотвратить коллизии.
Проблема заключается в том, чтобы создать скрипт выпуска, который примет номер среды и соответствующим образом установит значение «Начать с» последовательностей. В идеале я хотел бы использовать что-то вроде этого:
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
CREATE SEQUENCE seq1 START WITH &EnvironNum*100000;
--[more scripting]
Это не работает, потому что вы не можете вычислить числовое выражение в DDL.
Другим вариантом является создание последовательностей с использованием динамического SQL через PL / SQL.
ACCEPT EnvironNum PROMPT 'Enter the Environment Number: '
--[more scripting]
EXEC execute immediate 'CREATE SEQUENCE seq1 START WITH ' || &EnvironNum*100000;
--[more scripting]
Однако я бы предпочел избегать этого решения, поскольку я обычно стараюсь избегать выдачи DDL в PL / SQL.
Наконец, третий вариант, который я предложил, - это просто принять значение Start With в качестве переменной подстановки, а не номер среды.
Кто-нибудь лучше подумал, как это сделать?