使用 sqlplus 打印错误

Posted

技术标签:

【中文标题】使用 sqlplus 打印错误【英文标题】:Printing Error with sqlplus 【发布时间】:2012-04-06 20:54:49 【问题描述】:

您可以在下面看到我尝试在 sqlplus 上执行的 SQL 脚本模板:

WHENEVER SQLERROR EXIT 1 ROLLBACK
WHENEVER OSERROR EXIT 1 ROLLBACK

BEGIN
 -- Doing some Insert
END;
/

INSERT INTO TMP_TABLE VALUES('A', 'B')

COMMIT;
QUIT;
/

此脚本在我的本地系统上的文件 (Test1.sql) 中可用,我通过 Windows 命令行控制台连接到 Oracle 来运行此查询。在 cmd 下输入一行。

C:\Users\myself> sqlplus UNAME/PWD@//DB IP:PORT/SID @C:\Users\Test1.sql

在 SQL 脚本中,我故意没有用分号终止一条语句 (INSERT INTO...)(见上文)。现在,当我按照上述说明运行此脚本时,程序成功运行并打印一条消息:

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Apr 6 16:50:19 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options


PL/SQL procedure successfully completed.


Commit complete.

Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64
bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

当我在我的 SQL Navigator 工具上运行同一组脚本时,出现以下错误,这是正确的:

[10]:(错误):ORA-00933:SQL 命令未正确结束

我不明白为什么脚本没有报告此错误,而是显示类似“提交完成”的消息。

当我尝试使用 Windows 命令控制台通过 sdlplus 运行相同的脚本时,你能告诉我如何让我的脚本在控制台上抛出此错误吗?

【问题讨论】:

【参考方案1】:

我的理解是,在 sqlplus 脚本中,空行终止 sql 语句。我没有要测试的 Oracle 环境,但请尝试删除插入和提交语句之间的空行,然后查看是否出现错误。我想你会看到它(它会作为一个连接的 insert..commit 语句)。

看看SQL Plus reference中的执行命令部分

具体来说:

结束 SQL 命令

您可以通过以下三种方式之一结束 SQL 命令:

带有分号 (;) 在一行上单独带有一个斜杠 (/) 有一个空行

注意: 您可以使用 SET SQLBLANKLINES 命令(不在 iSQL*Plus 中)更改空行在 SQL 语句中的出现方式和行为方式。有关更改空行行为的更多信息,请参阅 SET 命令。

对于 SQLNavigator,不同的客户端工具会有不同的表现。 SQLNavigator 解释器的行为与 sqlplus 解释器不同。如果您因脚本问题致电 Oracle 支持,他们会问的第一件事是“在 sqlplus 中运行它时是否看到此错误?”

【讨论】:

以上是关于使用 sqlplus 打印错误的主要内容,如果未能解决你的问题,请参考以下文章

Sqlplus 两次打印结果并使用空行

结果不打印 Python - SQlplus

登录 sqlplus 为啥总是打印用户名?

SQLPLUS 不打印受影响的行数

SQLPlus 如何打印 COUNT(*) 的 MAX?

在 SQLPlus 上执行脚本时,它会打印一系列数字而不是输出