如何在发生错误时退出SQLPlus中的脚本并返回SQLPlus提示符,而不断开连接或退出SQLPlus?

Tho*_*ght 9 oracle sqlplus

我有一些经常运行的脚本,总是来自连接的SQLPlus会话.

我需要一种方法在发生错误时退出脚本,而无需断开或退出SQLPlus本身.100%的情况下,当发生错误时,连接的DBA将需要向会话发出一个或多个命令.的100%的时间,当发生错误时,也有其他的SQLPlus语句(并因此必须外部BEGIN..END;)以后,所述脚本不能被执行或可能出现严重问题.

注意:如果您建议WHENEVER SQLERROR EXIT那么您没有阅读上述文本.除了脚本之外,这将断开并退出SQLPlus ,这是不可接受的行为.

Tho*_*ght 8

我在这里发现了一个有趣的想法,当它与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)

  • 遗憾的是,一个像Oracle一样多的数据库会让你跳过这么多箍.不是吗? (4认同)