2012-04-06 11 views
1

私は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; 
/

このスクリプトは私のローカルシステムとI上のファイル(Test1.sql)で提供されていますWindowsのコマンドライン・コンソールからOracleに接続してこの問合せを実行しています。 cmdの下に行を入力します。私は意図的なセミコロンと1つの文(INSERT INTO...)を終了していませんでしたSQLスクリプトで

C:\Users\myself> sqlplus UNAME/[email protected]//DB IP:PORT/SID @C:\Users\Test1.sql 

(上記参照)。今、私は上記の指示に従うことによって、このスクリプトを実行すると、プログラムが正常に実行し、メッセージ出力します

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で実行しようとしているときに、スクリプトでこのエラーをコンソールに表示させるにはどうすればいいですか?

答えて

3

私の理解では、sqlplusスクリプトでは、空行がsql文を終了することを理解しています。テストするOracle環境はありませんが、挿入文とコミット文の間の空白行を削除し、エラーが発生するかどうか確認してください。私はあなたがそれを見ることができると想像しています(これは、連結されたinsert.commitステートメントとして機能します)。

    :あなたは3つの方法のいずれかでSQLコマンドを終了することができますSQLコマンド

    エンディング

    は、具体的に SQL Plus reference

    でコマンドの実行部を見てみましょう

  • セミコロン(;)付き
  • あなたは空白行の表示方法を変更し、(ないのiSQLでSET SQLBLANKLINESコマンドを使用してSQL文に振る舞うことができる*:空白行

注意と自身

  • によって行にスラッシュ(/)でプラス)。空白行の動作の変更の詳細については、SETコマンドを参照してください。

    SQLNavigatorでは、さまざまなクライアントツールの動作が異なります。 SQLNavigatorインタプリタは、sqlplusインタプリタと同じように動作しません。スクリプトに関する問題でOracleサポートに連絡すると、まず「sqlplusで実行するとこのエラーが表示されますか?」という質問が表示されます。