こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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でコールすることは可能でした。

投稿日時 - 2006-10-18 21:33:37

QNo.2481548

困ってます

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

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

とはいえ、ADOで問題ないならそのほうがいいかも。

投稿日時 - 2006-10-19 23:13:30

お礼

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

投稿日時 - 2006-10-20 11:08:58

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

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

投稿日時 - 2006-10-19 22:42:20

補足

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

投稿日時 - 2006-10-20 11:14:29

ANo.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

投稿日時 - 2006-10-19 21:30:42

補足

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

投稿日時 - 2006-10-20 11:18:44

あなたにオススメの質問