- ベストアンサー
VBScriptでSQLファイルを実行する方法は?
- WSHShell.Runメソッドを使用して、VBScriptでSQLファイルを実行する方法について説明します。
- SQL*Plus経由での実行やストアドプロシージャの呼び出しについても触れます。
- さらに、代替案としてVBSでOracleのProcedureを呼び出す方法も紹介します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
うろおぼえですみません。 WSHShell.Run (文字列) は、 コマンドラインからの実行とイコールではありません。 コマンド Start "" と同じ というか、「ファイル名を指定して実行」と同等なはずです。 (なので WSHShell.Run は実行ファイル以外も指定できる) なので、CMD /C (文字列) で実行する必要があったはずです。 とはいえ、ADOで問題ないならそのほうがいいかも。
その他の回答 (2)
- Bonjin
- ベストアンサー率43% (418/971)
>代替案として、VBSにてOracleのProcedureをコールする方法でも構いません。 VBSならADOを使ってOracleに直接接続出来るはずです。 ASPなどと基本的には同じなのでそれらを参考にすれば良いと思います。
補足
ADOで接続して、ストアドプロシージャのコールが可能ということでしょうか? できれば、具体的な方法を教えて下さい。 ADOで接続し「EXEC プロシージャ名」でキックしてみたのですが、SQLでは無いためエラーとなってしまいました。
- FudaKeji
- ベストアンサー率73% (58/79)
確認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
補足
確認1.ずっとプロセスが残ったままになります。 確認2.quitを記載しています。 詳しい説明をありがとうございました。 今回は、spoolを使わずにリダイレクトにて結果の出力を取得することができました。
お礼
CMD /C (文字列)で実行できました。 とても助かりました。ありがとうございます。