使用 .sql 文件和 SQL*Plus 报告 SQL 语句成功/失败
Posted
技术标签:
【中文标题】使用 .sql 文件和 SQL*Plus 报告 SQL 语句成功/失败【英文标题】:Reporting on SQL statement success/fail with .sql file and SQL*Plus 【发布时间】: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 等)?还是通过其他方式处理这一切?
干杯, 维克多
【问题讨论】:
【参考方案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
【讨论】:
以上是关于使用 .sql 文件和 SQL*Plus 报告 SQL 语句成功/失败的主要内容,如果未能解决你的问题,请参考以下文章