2012-04-06 117 views
1

下面你可以看到,我試圖在sqlplus中執行SQL腳本的模板:打印錯誤用sqlplus

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/[email protected]//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導航工具腳本,我得到以下錯誤,這是正確的:

[10]:(錯誤):ORA-00933:SQL命令不能正確地結束

我不理解爲什麼腳本沒有報告這個錯誤,而是像「提交完整的」顯示消息。

你能告訴我如何讓我的腳本在控制檯上拋出這個錯誤,當我試圖通過使用Windows命令控制檯的sdlplus運行相同的?

回答

3

我的理解是,在一個sqlplus腳本中,空行會終止一條sql語句。我沒有要測試的Oracle環境,但嘗試刪除插入和提交語句之間的空白行,然後查看是否出現錯誤。我會想象你會看到它(它將作爲一個串聯的insert..commit語句)。

看看在SQL Plus reference

具體執行命令部分:

結束一個SQL命令

您可以通過以下三種方式之一結束SQL命令:

  • 用分號(;)
  • 用線路上的斜槓(/)本身
  • 以一個空行

注: 您可以更改空行顯示的方式,並使用SET SQLBLANKLINES命令(未在iSQL在SQL語句的行爲*加)。有關更改空白行行爲的更多信息,請參閱SET命令。

對於SQLNavigator,不同的客戶端工具的行爲會有所不同。 SQLNavigator解釋器的行爲與sqlplus解釋器的行爲不同。如果您在腳本問題中調用Oracle支持,他們會問的第一件事是「在sqlplus中運行時是否出現此錯誤?」