【问题标题】:Reporting on SQL statement success/fail with .sql file and SQL*Plus使用 .sql 文件和 SQL*Plus 报告 SQL 语句成功/失败
【发布时间】:2011-09-13 07:10:49
【问题描述】:

我是同一个人问:

BEGIN/END and CREATE Table in single .sql file

无论如何,我们有几个通过 SQL*Plus 执行的 .sql 脚本。

这些脚本用于创建表、同义词、索引、视图等。

单个 .sql 文件通常包含多个 CREATE 语句。

我们正在寻找一种方法来报告每个 CREATE 语句的通过/失败,以及失败时的错误消息。

Create table foo: Pass
Create index bar: Fail - Reason...
Create synonym foo_1: Pass etc.

目前,我们可以解析 SQL*Plus 输出,但是其中包含很多无关内容,并且像这样解析日志文件并不是最可靠的方法。

有没有更好的方法通过 SQLPlus 以编程方式检查每个 SQL 语句的返回状态以及错误消息(如果有)?这是否可以通过 SQL 实现Plus?

或者我是否需要编写某种包装器(Bash、Python 等)?还是通过其他方式处理这一切?

干杯, 维克多

【问题讨论】:

    标签: sql oracle sqlplus


    【解决方案1】:

    我个人不喜欢将逻辑嵌入到 DDL 脚本中,除非绝对需要 (脚本很容易变得过于复杂,并且其动作难以预测)

    我更喜欢扫描脚本输出是否有错误,例如:grep for the string ORA-

    然后检查架构中没有无效的对象

    【讨论】:

      【解决方案2】:

      如果您想在发生错误时继续使用 SQL 脚本,那么您应该在 PL/SQL 块内创建表和索引,因为 PL/SQL 具有良好的异常处理能力:

      BEGIN
          EXECUTE IMMEDIATE 'CREATE TABLE XY ( ... )';
      EXCEPTION
          WHEN OTHERS THEN
              DBMS_OUTPUT.PUT_LINE('Creating table XY failed: ' || SQLERRM);
      END;
      /
      

      如果你想在出错时结束当前的SQL脚本,可以使用下面的SQL*Plus命令,在调用SQL*plus的脚本中进行错误处理:

      whenever sqlerror exit sql.sqlcode
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-19
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 2017-06-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多