重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

現在、WindowsXP環境で、オラクル11g R2を勉強中です。SQL*Plus でSELECT文を1つ実行し、その後、SAVEコマンドを使ってバッファをファイルに保存しました。ファイルの中身は、メモ帳で開くと、以下のような感じです。

SELECT no FROM student
/

バッファをクリアして、このファイルをGETコマンドでバッファに読み込み、RUNコマンドで正常に実行できました。
今度は、違うSELECT文を実行します。次に、「SAVE ファイル名 APPEND」で、実行したバッファの内容を、先ほどのファイルに追加しました。ファイルの中身は、メモ帳で開くと、以下のような感じです。

SELECT no FROM student
/
SELECT no,name FROM student
/

ところが、バッファをクリアして、上記のファイルをGETコマンドで読み込み、RUNコマンドで実行すると以下のようなエラーになります。

SQL> run
1 SELECT no FROM student
2 /
3* SELECT no,name FROM student
/
*
行2でエラーが発生しました。:
ORA-00933: SQLコマンドが正しく終了されていません。

APPENDで追加する前のSQL文では、問題なかったので、APPENDしたことで、最初のSQL文の終端がおかしくなったようです。気になるのは、SQL文の次の行に挿入されている / です。なぜ、このような文字が勝手に挿入されるのでしょうか?これは、Windows 環境が原因でしょうか?それとも、SAVE APPENDのバグでしょうか?
初歩的な質問で恥ずかしいのですが、原因や対策方法がおわかりの方がいらっしゃいましたら、教えていただけないでしょうか。

A 回答 (3件)

想像ですが、SQL*Plusは一個のSQL文しか処理しませんよね。


つまり、APPENDで複数のSQL文を格納したファイルを@ファイル名で実行した後に、
listと入力すると最後のSQL文だけが表示されますよね。
しかし、get ファイル名の後にlistすると複数の文が表示されます。
SQL*Plusの通常の状態ではSQL文は1つしか許さないのに複数のSQL文がしかも/付きで
バッファにあるので、そのような状態は考慮していないのでしょう。
ま、仕様がちゃんと考慮されてないのでしょうね
    • good
    • 0

試してみました。


確かにappendでsaveしてrunで実行するとエラーになりますね。
回避方法としては
@ファイル名
で実行するとちゃんとエラーなく実行されます。
こちらの環境は、Linux RedHat4.7 Oracle EE
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
です。

この回答への補足

Linuxでも同じですか・・・。
Windows だからダメなのかと思っていました。
これはもう、「バグ」ってことでいいですね。
「仕様」ってことはないですよね。
とりあえず、貴重な時間を割いて実験していただいて感謝します。

補足日時:2010/12/22 01:16
    • good
    • 0

/は必ず追加されます。

マニュアルにも記載されてます。
APPENDでSAVEしておかしくなるのはちょっと不明です。

この回答への補足

教えていたいてありがとうございます。
どうやら、; の代わりにつくことを知りました。
メモ帳で、同じ内容のファイルを作った場合は、実行できるので
となると、いよいよAPPENDでSAVEした場合のバグの可能性ありですね。

補足日時:2010/12/20 10:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す