我有一些经常运行的脚本,总是来自连接的SQLPlus会话.
我需要一种方法在发生错误时退出脚本,而无需断开或退出SQLPlus本身.100%的情况下,当发生错误时,连接的DBA将需要向会话发出一个或多个命令.的100%的时间,当发生错误时,也有其他的SQLPlus语句(并因此必须是外部的BEGIN..END;)以后,所述脚本不能被执行或可能出现严重问题.
注意:如果您建议WHENEVER SQLERROR EXIT那么您没有阅读上述文本.除了脚本之外,这将断开并退出SQLPlus ,这是不可接受的行为.
我在这里发现了一个有趣的想法,当它与spencer7593的答案相结合时,会给我选择性的子脚本调用,我可以传递PL/SQL输出值.以机智:
VAR continue number;
EXEC :continue := 1;
BEGIN
SELECT some_bool_test() INTO :continue FROM dual;
END;
SET termout OFF
COLUMN script_name NEW_VALUE v_script_name
SELECT decode(:continue, 1, 'run_stuff.sql', 'skip.sql') script_name FROM dual;
SET termout ON
@&v_script_name :some_other_values
Run Code Online (Sandbox Code Playgroud)
哪里skip.sql是空文本文件.
更新: 我已将大部分内容移动到一个RUN.SQL文件中,我将布尔值(0或1)传递&1给脚本名称,以便成功调用&2,然后将任何其他预期参数传递给调用脚本.因此,它最终看起来像这样:
VAR continue number;
EXEC :continue := 1;
BEGIN
SELECT some_bool_test() INTO :continue FROM dual;
END;
@run.sql :continue 'run_stuff.sql' :some_other_values
Run Code Online (Sandbox Code Playgroud)