其他SQL脚本执行的SQL脚本是否继承在所有客户端的父级中设置的系统变量



背景

我们使用的是Oracle 12c。

我有一个PL/SQL文件,名为load_all.SQL,它执行另一个PL/SQL文件名为financial_aid.sql。开发人员正在向financial_aid_sql中的注释添加与号字符。当他们在PL/sql Developer中编译Finance_aid.sql时,与号字符不会注册为Oracle sql替换变量。然而,当它通过ant脚本执行时,它们会注册为SQL替换变量。结果,我们得到的包无法创建包体,并显示以下错误

SP2-0546: User requested Interrupt or EOF detected.

建议的解决方案

为了解决这个问题,我们想在SQL文件中添加一个系统变量SET DEFINE OFF。这可以防止在自动构建过程中发生SP2-0546错误。

然而,我们的构建过程很复杂,并且使用许多不同的客户端(ANT、SQLPlus、Maven等(来运行这些PL/SQL文件。此外,load_all.sql动态执行数百个其他sql文件,我们不希望在所有这些文件中都使用SET DEFINE OFF

问题

我们知道SET DEFINE OFF是一个客户端系统变量。如果我们将SET DEFINE OFF添加到load_all.sqlload_all.sql父级执行的每个文件都将继承所有客户端的DEFINE OFF参数,或者该函数是特定于客户端的?

下面是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

我们主要想知道financial_aid.sql、other_file.sql以及load_all.sql执行的所有其他sql文件是否会继承SET DEFINE OFF变量,以及这是否依赖于客户端

是的,父脚本调用的文件将继承SET DEFINE OFF

最新更新