Возможное дублирование:
декодирование SQLplus для выполнения сценариев
Я просмотрел все и, похоже, не нашел ответа на свой вопрос, но я относительно новичок в oracle, но хорошо разбираюсь в базе данных / SQL, поэтому с моей стороны это может быть недоразумение. Я использую файлы Oracle .SQL, используя сочетание PL / SQL и SQL * Plus в Linux (ubuntu) для заполнения базовых таблиц в базе данных, и у меня есть несколько сценариев, которые вызываются из одного «главного сценария».
Так, например, у меня есть мастер-сценарий, который выглядит примерно так:
@folder1/script1.sql
@folder2/script2.sql
В каждом из сценариев у меня есть операторы SQL, вызывающие пакет в моей базе данных для заполнения некоторых полей. Я хочу иметь возможность запрашивать у пользователя ввод для определения среды, а затем запускать определенные сценарии на основе этого ввода. Я знаю, как ввести переменную в свой скрипт, но когда я это делаю, мне кажется, что я не могу вызывать внешние скрипты.
Так, например, я знаю, как использовать такую переменную:
set define on
def &&env=env1
begin
if '&&env' = 'env1' then
.
.
.
.
END IF;
END;
Что будет запрашивать у пользователя переменную именно так, как я хочу, но я, похоже, не могу вызывать внешние скрипты в этом блоке, как упомянуто выше. Насколько я понимаю, это связано с тем, что в блоке Begin / End он выполняет PL / SQL, а за его пределами - SQL * Plus (я могу ошибаться в этом, опять же относительно ново для Oracle)
Поискав в Интернете, я обнаружил, что люди рекомендуют использовать EXECUTE IMMEDIATE в скрипте для вызова внешнего скрипта, хотя это считается плохой практикой, но я могу заставить это работать. Я предполагаю, что это связано с тем, что сценарий должен находиться на сервере, поскольку PL / SQL является серверной стороной (в моем случае не будет работать).
В конце концов, я хочу что-то, что работает в этом направлении, но это, похоже, не работает.
set define on
def &&env=env1
begin
if '&&env' = 'env1' then
@folder1\script1.sql
@folder1\script2.sql
ELSEIF '&&env' = 'env2'
@folder2\script1.sql
@folder2\script2.sql
END IF;
END;
Однако приведенный выше код не работает, он не работает при попытке вызвать внешний скрипт, и я не могу найти что-либо в моем поиске в Интернете, чтобы выяснить, возможно ли это или нет.