【发布时间】:2017-12-28 12:41:57
【问题描述】:
我有一个主 SQL 脚本(比如 main.sql),其中包括其他文件,如下所示:
-- Contents of main.sql
@@init.sql
@@body.sql
这个模板是固定的,我无法控制它。我只能将任何代码放入包含的文件中。 Init.sql 由 PL/SQL 代码组成。 Main.sql 使用 SQL Plus 运行。现在我想要init.sql 的以下行为:
- 如果
cond1为真,则init.sql应终止main.sql的执行,并出现错误,导致body.sql无法运行 - 如果
cond2为真,那么init.sql应该成功终止main.sql的执行,这样body.sql也不会运行 - 如果
cond3为真,那么init.sql应该成功退出并且body.sql应该开始执行
我正在尝试使用 RAISE_APPLICATION_ERROR 和 WHENEVER SQLERROR EXIT 来获得这种行为,因为我了解到这是完全终止 SQL Plus 中的执行的唯一方法,但是我在实现第 2 号项目符号时遇到了麻烦作为
- 我无法使
init.sql退出到带有0 代码的操作系统。我试图设置一个绑定变量并使用WHENEVER SQLERROR EXIT :retcode,但当EXIT被调用时:retcode似乎为空,即使dbms_output.put_line在调用RAISE_APPLICATION_ERROR之前立即输出此变量的正确值 - 这种情况是正常的,我宁愿不要出现 Oracle 异常
您能帮我完成第 2 条,或者建议一种完全不同的方法。
【问题讨论】: