Вы можете (ab) использовать переменные подстановки:
set termout off
column var3_path new_value var3_path
select case
when '&var3' = 'true' then './oracle/myOthersqlfile.sql &&varA &&varB'
else '/dev/null'
end as var3_path
from dual;
set termout on
@&var3_path
Запрос между командами set termout
- которые просто скрывают вывод запроса - использует выражение case, чтобы выбрать реальный путь к файлу или фиктивный файл; Я использовал / dev / null, но у вас может быть собственный файл no-op, который ничего не делает, если это понятнее. Результатом запроса является псевдоним var3_path
. Строка new_value
перед тем, как превратить это в переменную подстановки. Затем @
расширяет эту переменную.
Итак, если var3
- «истина», то выполняется:
@./oracle/myOthersqlfile.sql &&varA &&varB
(или, фактически, с varA
и varB
переменные уже заменены их фактическими значениями), и если это ложь, он запускает:
@/dev/null
, который ничего не делает, тихо.
Вы можете set verify on
вокруг этого кода, чтобы увидеть, когда и где происходит подстановка.