Вызов внешнего скрипта в файле .sql с логикой принятия решения

Возможное дублирование:
декодирование 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;

Однако приведенный выше код не работает, он не работает при попытке вызвать внешний скрипт, и я не могу найти что-либо в моем поиске в Интернете, чтобы выяснить, возможно ли это или нет.


person eerongal    schedule 12.11.2012    source источник