VBScriptでSQLファイルを実行する方法は?

このQ&Aのポイント
  • WSHShell.Runメソッドを使用して、VBScriptでSQLファイルを実行する方法について説明します。
  • SQL*Plus経由での実行やストアドプロシージャの呼び出しについても触れます。
  • さらに、代替案としてVBSでOracleのProcedureを呼び出す方法も紹介します。
回答を見る
  • ベストアンサー

VBScriptでSQLファイルの実行

WSHShell.Runにて、SQL*Plus経由でXXX.sql(内部でストアドプロシージャをコールします)を実行し、ログも出力したいのですが、以下のコマンドをRunに指定すると、sqlplusより返ってこなくなってしまいます。 コマンドプロンプトで実行する分には、正常に終了するのですが・・・。 何が悪いのかわかりません。。 sqlplus -s ユーザー/パスワード@ホスト名 @C:\temp\XXX.sql > C:\temp\XXX.log 代替案として、VBSにてOracleのProcedureをコールする方法でも構いません。 わかる方いらっしゃいましたらご教授願います。 ちなみに、コマンド部分をbatファイルにしてそのbatファイルをVBSでコールすることは可能でした。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

うろおぼえですみません。 WSHShell.Run (文字列) は、 コマンドラインからの実行とイコールではありません。 コマンド Start "" と同じ というか、「ファイル名を指定して実行」と同等なはずです。 (なので WSHShell.Run は実行ファイル以外も指定できる) なので、CMD /C (文字列) で実行する必要があったはずです。 とはいえ、ADOで問題ないならそのほうがいいかも。

er_kuma
質問者

お礼

CMD /C (文字列)で実行できました。 とても助かりました。ありがとうございます。

その他の回答 (2)

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

>代替案として、VBSにてOracleのProcedureをコールする方法でも構いません。 VBSならADOを使ってOracleに直接接続出来るはずです。 ASPなどと基本的には同じなのでそれらを参考にすれば良いと思います。

er_kuma
質問者

補足

ADOで接続して、ストアドプロシージャのコールが可能ということでしょうか? できれば、具体的な方法を教えて下さい。 ADOで接続し「EXEC プロシージャ名」でキックしてみたのですが、SQLでは無いためエラーとなってしまいました。

  • FudaKeji
  • ベストアンサー率73% (58/79)
回答No.1

確認1.ストアドを実行しているとのことですので、処理に時間がかかっているだけということはないですよね? 確認2.実行している .sql ファイルの最後にexit命令を書いてあるでしょうか? あと、sqlplusを WshShellで実行すると別シェルで実行されるのでリダイレクトでは結果を取れないと思います。sqlファイルの中でspoolすればどうでしょう。 --vbs例-- strPlusCmd = "sqlplus.exe" strExecPath = "E:\temp" strExecFile = strExecPath & "\execOracle.sql" strLogFile = strExecPath & "\execOracle.log" set WshShell = WScript.CreateObject("WScript.Shell") strExecCmd = strPlusCmd & " -s /nolog @" & strExecFile & " " & strLogFile WshShell.Run strExecCmd, 0, true set WshShell = Nothing --sql-- conn example/example@example set term off set head off set pages 0 spool &1 select username from dba_users; spool off exit

er_kuma
質問者

補足

確認1.ずっとプロセスが残ったままになります。 確認2.quitを記載しています。 詳しい説明をありがとうございました。 今回は、spoolを使わずにリダイレクトにて結果の出力を取得することができました。

関連するQ&A

  • 別ファイル(.sql)に記述したクエリの連続実行

    毎度お世話になっております。 現在、SQLServer2005EXPRESS,VisualSudio2008(C#)にて、 十数個の新しいストアドプロシージャと、 それを必要とするアプリを作成しております。 これらを配布先で実装するにはどうするのが最も(使用者にとって)容易か? 知恵をお貸しください。 アプリは実行ファイルをそのまま配布(インストーラー等)すれば 問題無いと考えていますが、ストアドプロシージャは配布先の サーバー管理者がDBに追加しなくてはいけません。 現在、ストアドを作成するためのSQL文を記述した "CREATE_01.sql"~"CREATE_10.sql"を用意していまして、 DB管理者はManagement StudioでDBにログインした状態で これら.sqlファイルを順番にダブルクリック&実行していけば ストアドの作成はできます。 ですが全部で10回も同じ操作をせねばいけません。 できれば「これ押すだけで後は待つだけ」くらいに容易な物にしたいのです。 "CREATE_01.sql"~"CREATE_10.sql"の中身は全てストアドのCREATE文 で、試しに1っの.sql内に実行したい順に CREATE PROCEDURE XXX_01 … AS (中略) CREATE PROCEDURE XXX_02 … AS (中略) CREATE PROCEDURE XXX_03 … AS (中略) …と、いった記述をしますと、使用変数等のエラーが多発し、 また10のSQL中でエラーが出ないように変数を振りなおす&確認する 時間を考えると効率的な方法ではなく思えます。 コマンドの連続実行、というと.batファイルが真っ先に思い浮かぶの ですが、.bat 入門 SQLServer 等のキーワードで検索をしましたが batの用法が幅広いからでしょうか? 現状の私に活用・理解出来るサイト等を見つける事が出来ませんでした。 初歩的な質問をしているかもしれませんが、どうぞよろしくお願いします。

  • VBSでバッチを実行できません。

    C:\temp\test.batをVBSで実行しようとするのですが、 何度やっても実行されません。 想像ですが、c:\WINNT\System32\cmd.exeが動いている ようなのですが、肝心のC:\temp\test.batが動きません。 以下のように記述しました。 Dim WshShell Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run ("cmd /c c:\temp\test,0,True") WIN2K、IE6.0の環境です。 どこか記述に誤りでもあるのでしょうか? どうぞよろしくお願いいたします。

  • SQL Serverについて

    WIN NTのSQL Server 6.5を使っているのですが ストアドプロシージャの中からDOSのコマンドを 実行する事はできるのでしょうか、もしできるのであれば やり方を教えてください。 ストアドプロシージャの中からDOS バッチを起動する 方法でもかまいません。 お願いします。

  • コマンドプロンプトからのcmd実行について

    現在VBSでオブジェクトを定義しrunを使いcmd経由で他のバッチ・VBS・ソフトの起動をやっています。 ふととあるパスが実行できませんでした。 そこで別途個別にコマンドプロンプトだけで実行してみましたがやはりうまく処理できません。 [echo.bat] echo test pause [コマンドプロンプト] rem その1 cmd /K c:\temp\a\echo.bat rem その2 cmd /K C:\Temp\(a\echo.bat その1の結果 C:>cmd /K C:\Temp\a\echo.bat C:>echo test test C:>pause 続行するには何かキーを押してください . . . その2の結果 C:>cmd /K C:\Temp\(a\echo.bat 'C:\Temp\' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 C:> 上記のように1は正常に処理され2はうまく処理されません。 解決策をひたすら検索したのですが見つからず なんとなくだいたい分かったのが一部『(』や『)』や『&』や『@』や『^』などの記号が混じるとどうやらうまく処理できないようです。 なぜ処理できないのか?と、如何すればこれを回避して実行できるか分かる方がいればよろしくお願いします。 備考: (現状の緊急回避として記号のあるパスは記号のないパスから経由batを生成する方法を思いつきましたが自分で馬鹿だと思います) (経由バッチの中身が"C:\Temp\(a\echo.bat"ならば実行できるから) また、cmd /K "C:\Temp\(a\echo.bat" では実行できませんでした。 OSはXPです。コマンドプロンプトヴァージョンは(Microsoft Windows XP [Version 5.1.2600])です

  • VBSCRIPTでcmd命令(dir)を実行させて

    パスはcsvファイルで読みこんで、vbs上で Set Shell = CreateObject("WScript.Shell") Shell.Run "cmd /C ""dir \¥xxx\xxxxx\xxxxx" を実行させてアクセスできなかったパスがぞんざいするならエラーで返して続いて実行してほしいです。 それで最後にログにエラー情報を書く処理をおこないたいです。問題はcmdだとecho %errorlevel%これを使えば すぐにこげたことを1か0で返してくれますが vbs上でも可能ですか?

  • シェルでのファイル内に記載されたSQLファイル実行

    Webを検索しても方法が出てこなかったため、質問させていただきます。 ファイル内に記載されたSQLファイルをPostgresで実行したいと思っております。 OracleのSqlPlusでは以下のファイルを次のように実行できました。 【コンソール】 SQL> @@C:/path/hogehoge.sql 【ファイルの中身】 @@C:/path/xxx.sql @@C:/path/yyy.sql @@C:/path/zzz.sql ・ ・ ・ 今回、Postgresでもファイル内に記載されたSQLファイルを呼び出して実行するために、コンソールで以下のコマンドを実行したのですが、エラーとなってしまいます。 psql -e DB名 ユーザ名 < C:/path/hogehoge.sql 他のオプション指定が必要なのか、またはファイル内のSQLファイルのパスの指定方法が間違っているのか…現状では解決方法が見つかっておりません。 どなたか解決方法を知っている方がいらっしゃれば教えていただけませんでしょうか?

  • SQLファイル内のSQL実行ログ取得

    すいません、教えてください。 以下のようなCMDバッチを作成しました。 TEST.cmd------------ sqlplus -s ID/PASS@DB @MAIN.sql 'SUB1.sql' 'SUB2.sql' > MAIN.log echo %ERRORLEVEL% MAIN.sql------------ @&1 @&2 commit; quit; これを実行した場合、MAIN.sqlの最後のコマンドquit;の 実行結果を返してきているのでしょうか? SUB1.sql、SUB2.sqlで失敗していても%ERRORLEVEL%で0が返ってきます。 MAIN内のそれぞれのsqlの実行結果ログを取得することは可能でしょうか? SUB.sqlの内容はいずれも単純なMERGE文です。 識者の方がいればご教示いただきたく存じます。 よろしくお願いいたします。

  • SQLをバッチで実行

    掲題の件で少し教えていただきたいことがあります。 バッチファイルでSQLPLUSを起動し、 @XXXXXXXXX.SQL >> XXX.log(バッチのログ)と 実行するのですが、このSQL文がインサート文や アップデート文など通常のSQL文だと バッチでのリダイレクションの結果に XX行作成されました。とかXX行更新されましたとか 出力されると思うのですが、 実行するSQL文の中でさらに、 @XXXXXXXXX.SQL と記述していると どのようにログファイルに出力されますか? XX行作成されました。とかXX行更新されましたとか が出るとうれしいのですが… わかりにくい質問かもしれませんがお願いいたします。

  • batファイルのようにSQLを実行

    WindowsでMySQLを使用しています。 数十個のSQLを繰り返し発行したいのですが、題名の通りbatファイルのように、おのおののSQLコマンドを一個の実行ファイルにし、ダブルクリックで実行できませんか。 お願いいたします。

    • ベストアンサー
    • MySQL
  • VBScript(WScript)のバッチファイル実行

    お世話になります。 VBScriptで困っています。 ご存知の方、ご教示願えますでしょうか。 Windowsでバッチファイルを実行したときに、DOS画面(コマンドプロンプト)が一瞬パッて表示されるかと思います。 現在開発中のシステムで、プログラムからバッチファイルを自動で実行する処理を入れております。 通常ならばバッチファイルを実行した場合、DOS画面が表示されてしまいますが DOS画面を出さないようにプログラムを組んでいます。 つまり、VBScriptからバッチファイルを実行しております。 以下、VBScriptのソースを記載します。 Set objShell = WScript.CreateObject("WScript.Shell") fcresult = objShell.Run("C:\abc.bat", 0, True) wscript.quit fcresult 上記のVBSを実行すると、必然的に「abc.bat」が実行されます。 しかし、現在僕が使っている環境ですとDOS画面が表示されません(←これがやりたいこと) しかし、お客さんの環境で同じ様にVBSからバッチファイルを実行すると 「C:\WINDOWS\System32\CScript.exe」という名前でDOS画面が起動されてしまいます。 周りの環境でもVBSからバッチをたたくような処理を行ってみましたが、DOS画面が起動されず。。。 正直、再現が難しいため大変困っております。 お客さんの環境では100%再現されます。 全くもって原因がつかめておりません。 Windowsのセキュリティの設定でしょうか!? ご存知の方いらっしゃいましたら、知恵をお貸しください。 よろしくお願いいたします。

専門家に質問してみよう