Фон
Мы используем Oracle 12c.
У меня есть файл PL/SQL с именем load_all.sql, который выполняет другой файл PL/SQL с именем financial_aid.sql. Разработчики добавляют символы амперсанда в комментарии в файле financial_aid.sql. Когда они компилируют financial_aid.sql в PL/SQL Developer, амперсанд не регистрируется как переменные подстановки Oracle SQL. Однако, когда он выполняется через сценарий ant, они регистрируются как переменные подстановки SQL. В итоге получаем, что пакету не удается создать тело пакета и выводится следующая ошибка
SP2-0546: User requested Interrupt or EOF detected.
Предложенное решение
Чтобы решить эту проблему, мы хотим добавить системную переменную SET DEFINE OFF
в файлы SQL. Это предотвращает возникновение ошибки SP2-0546
во время процесса автоматической сборки.
Однако наш процесс сборки сложен и использует много разных клиентов (ANT, SQLPlus, Maven и т. д.) для запуска этих файлов PL/SQL. Кроме того, load_all.sql динамически выполняет сотни других файлов SQL, и нам не нужно выполнять SET DEFINE OFF
во всех этих файлах.
Вопрос
Мы знаем, что SET DEFINE OFF
— это системная переменная на стороне клиента. Если мы добавим SET DEFINE OFF
в load_all.sql, каждый файл, выполняемый родительским файлом load_all.sql, унаследует параметр DEFINE OFF
для all клиенты, или функция специфична для клиента?
Ниже приведен пример файла load_all.sql с переменной SET DEFINE OFF
для пояснения.
Код
SET DEFINE OFF
PROMPT 'loading @financial_aid.sql'
@financial_aid.sql
PROMPT 'loading @other_file.sql'
@other_file.sql
PROMPT 'loading @other_file2.sql'
@other_file2.sql
Нам, по сути, нужно знать, наследуют ли переменную SET DEFINE OFF
переменную SET DEFINE OFF
, и зависит ли она от клиента?