アプリ版:「スタンプのみでお礼する」機能のリリースについて

WSHShell.Runにて、SQL*Plus経由でXXX.sql(内部でストアドプロシージャをコールします)を実行し、ログも出力したいのですが、以下のコマンドをRunに指定すると、sqlplusより返ってこなくなってしまいます。
コマンドプロンプトで実行する分には、正常に終了するのですが・・・。
何が悪いのかわかりません。。

sqlplus -s ユーザー/パスワード@ホスト名 @C:\temp\XXX.sql > C:\temp\XXX.log

代替案として、VBSにてOracleのProcedureをコールする方法でも構いません。

わかる方いらっしゃいましたらご教授願います。

ちなみに、コマンド部分をbatファイルにしてそのbatファイルをVBSでコールすることは可能でした。

A 回答 (3件)

うろおぼえですみません。


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

とはいえ、ADOで問題ないならそのほうがいいかも。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/10/20 11:08

>代替案として、VBSにてOracleのProcedureをコールする方法でも構いません。


VBSならADOを使ってOracleに直接接続出来るはずです。
ASPなどと基本的には同じなのでそれらを参考にすれば良いと思います。

この回答への補足

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

補足日時:2006/10/20 11:14
    • good
    • 0

確認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を使わずにリダイレクトにて結果の出力を取得することができました。

補足日時:2006/10/20 11:18
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A