背景
我们使用的是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.sql,load_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