LoginSignup
CoconaBayashi
@CoconaBayashi

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

バッチファイルで「ファイル"echo.sql"をオープンできません。」というエラーが発生する

「ファイル"echo.sql"をオープンできません。」

Windows OS上でspoolコマンドを実行するバッチを作成しています。
想定通りの挙動をしない為助言を頂けましたら幸いです。

発生している問題・エラー

以下のようなエラーメッセージが出てしまいます。

ファイル"echo.sql"をオープンできません。

該当するソースコード

batファイルの中身は以下の通りです。

@ECHO OFF

set SQL_Dir=C:\TEMP\SQLバッチ\

SQLPLUS ●●●●/●●●●@●●●● @"%SQL_Dir%select_商品.SQL"

exit

SQLの実行結果自体は正しく取れているので
SQLPLUSに指定しているDBへのログイン情報には問題はない認識です。

自分で試したこと

ご助言を頂き、引数に正しく値が代入されているか試したのですが、
変数「SQL_Dir」には「C:\TEMP\SQLバッチ\」が代入されていることと、
「@%SQL_Dir%select_商品.SQL」では意図通りのパスが引き渡されていることを確認できました。

spoolコマンドを用いる際のSQLの書き方に問題があるのかなとも思ったのですが、
インターネット上に特に注意事項などの記事が見当たらず、行き詰ってしまいました。

何か原因などお分かりになる方がいらっしゃいましたらご教授いただけましたら幸いです。
よろしくお願いいたします。

0

2Answer

@ECHO OFF は完璧に効いています。

@ECHO ON

にして実行してください。
別の問題点が見えてきますよ。

@echo on
chcp 932   または、 chcp 65001
set SQL_Dir=C:\TEMP\SQLバッチ\
echo %SQL_Dir%
SQLPLUS -s id/pw@db @C:/TEMP/SQLバッチ/select_商品.SQL
exit 0
0

Comments

  1. @CoconaBayashi

    Questioner

    御回答ありがとうございます。
    @ECHO ON で実行してみました。
    確かに効いていることが分かりました。
    勉強不足ですみません。

    加えて、echo %SQL_Dir% も実行してみて
    意図した通りの値が引数に代入されていることが確認できたのですが、
    やはり「ファイル"echo.sql"をオープンできません。」のエラーメッセージの謎が解けません…
    SQLの出力結果は正しいようなのでこれはしょうがないものとしてスルーするしかないのですかね…

@ECHO OFFコマンドの表示をOFFにするオプションなので、外部プログラムの実行結果を出力する内容まで関与しません。
@ECHO OFFの行を削除することで表示の違いを得られると思います。

またファイルパスはクオートで囲むのが基本です。

SQLPLUS ●●●●/●●●●@●●●● @"%SQL_Dir%select_商品.SQL"

ちなみにchcpは理解していないと予期せぬ問題が発生するため非推奨です。
バッチのエンコードがASCII或いはShift-JISであれば適切に出力されます。

0

Comments

  1. @CoconaBayashi

    Questioner

    御回答ありがとうございます。
    @ECHO OFF/OFF の違い、理解できました。
    ありがとうございます。

    頂いた助言を受けまして、ファイルパスをクオートで囲ってみたのですが
    「ファイル"echo.sql"をオープンできません。」のエラーメッセージはクリアできませんでした。
    バッチファイルの中には投稿で書いたコード以外は特に何も書いておりませんので
    SQLファイルの中身側に問題があるということでしょうかね…。

  2. もしかするとSQLファイルの中身に@echo.sqlのような記述があり、フルパスではないから解釈できない可能性もありそうです。

    それかSQLPLUSの前行にCD %SQL_Dir%を追加し、カレントディレクトリを変更することで変化あるかも確認した方がよいかもしれません。

  3. @CoconaBayashi

    Questioner

    SQLファイルの中身に@echo.sqlのような記述があり、フルパスではないから解釈できない可能性もありそうです。

    →こちらが原因でした!
    大変助かりました。お礼が遅くなってしまい申し訳ありません。
    ありがとうございました。

Your answer might help someone💌