Oracle SQL Developer:运行脚本,出错时继续

Posted

技术标签:

【中文标题】Oracle SQL Developer:运行脚本,出错时继续【英文标题】:Oracle SQL Developer: run script, continue on error 【发布时间】:2020-09-02 10:28:18 【问题描述】:

我正在使用 SQL Developer 20.2 为 Oracle 12c 数据库更新运行批处理脚本。我将脚本文件拖放到编辑器窗口中,然后单击“运行脚本(F5)”按钮。由于某种原因,如果脚本遇到错误(DDL 语句 - 没有显式抛出 PL/SQL 函数),程序就会停止。

例子:

drop sequence my_seq;  -- sequence may not exist yet
create sequence my_seq
  start with 1
increment by 1
    minvalue 1
    maxvalue 9999999999
       cache 100
       cycle;

drop 语句可能会遇到错误,因为该序列不存在。 SQL*Plus 会忽略该错误并继续运行脚本,但 SQL Developer 会停止执行,从而导致补丁更新不完整。

我能做什么?

【问题讨论】:

【参考方案1】:

SqlDeveloper 默认在发现错误时停止。您可以使用以下方法更改该行为:

whenever sqlerror continue;
drop sequence my_seq;  -- sequence may not exist yet, in case of error continue
-- then we want to stop in error
whenever sqlerror exit failure;
create sequence my_seq
  start with 1
increment by 1
    minvalue 1
    maxvalue 9999999999
       cache 100
       cycle;

例子

解释

whenever sqlerror continue 指示脚本继续,无论发生什么错误 whenever sqlerror exit failure 指示脚本在出错时停止并退出执行。

参考可用的命令和选项

whenever sqlerror

【讨论】:

如果您能为未来的用户添加这两行的解释会更好。 @AnkitBajpai ,完成,甚至我也包含了文档本身的链接;)【参考方案2】:

那不应该发生。默认情况下,SQL Developer 会运行编辑器的全部内容或您在按 F5 时选择的任何内容。

drop sequence my_seq;  

create sequence my_seq
  start with 1
increment by 1
    minvalue 1
    maxvalue 9999999999
       cache 100
       cycle;

F5

您可以看到 drop 失败,但它继续到 CREATE。这一切都在一个'去'

【讨论】:

我相信旧版本也是如此。这就是为什么我开发这样的代码并且从未遇到问题的原因。也许还有一个设定。 Roberto Hernandez 的解决方案有效。 老了,也许是十年前...也许他的 login.sql 中有一些东西,每当 sqlerror 退出时就会设置,这是我最好的猜测

以上是关于Oracle SQL Developer:运行脚本,出错时继续的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle SQL Developer 中恢复未保存的 SQL 查询脚本

Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理

Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理

在 PL/SQL Developer 中运行的日期查询显示时间,但在 Oracle SQL Developer 中不显示

sql developer哪个版本

如何在 Oracle SQL Developer 中多次执行相同的存储过程?