使用sqlplus打印错误

时间:2012-04-06 20:54:50

标签: sql oracle sqlplus

下面你可以看到我试图在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 个答案:

答案 0 :(得分:3)

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

查看SQL Plus reference

中的执行命令部分

具体做法是:

  

结束SQL命令

     

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

     
      
  • 用分号(;)
  •   
  • 单独使用斜线(/)
  •   
  • 有一个空行
  •   
     

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

对于SQLNavigator,不同的客户端工具的行为会有所不同。 SQLNavigator解释器的行为与sqlplus解释器的行为不同。如果您通过脚本问题调用Oracle支持,他们首先要问的是“在sqlplus中运行它时是否看到此错误?”