• 締切済み

SQLの結果でWindowsコマンドを実行

毎度お世話になります。 SQL文の実行結果をもとにWindowsコマンドを実行したいのですが方法がわからず困っております。 ご存知の方がおられましたらご教示いただれば幸いです。 まず実行するSQLは select foldername列 from A表; foldernameは、複数行の結果が返ってきます。 この帰ってきた結果を元に、Winddowsのフォルダー(ディレクトリ)を削除するコマンド > rmdir c:\abc\foldername を発行して、c:\abcフォルダー配下にあるfoldernameと同じ名前のフォルダーを削除 することを考えています。foldernameは複数ありますので、ループ処理も必要です。 基本的な質問で恐縮ですが、何卒よろしくお願いします。

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

むかしは、 <c:\temp\exec.bat> sqlplus username/password @c:\temp\sqlScript.sql call c:\temp\execute.bat <c:\temp\sqlScript.sql> set header off set linesize 1000 spool c:\temp\execute.bat select 'rmdir c:\abc\' || foldername列 from A表; spool off exit とファイルを2個作ってc:\temp\exec.bat を実行していました。 (ちょっと忘れているところもあって、他になにかメッセージがでてきたのが邪魔だったので  出さないようにするset xxxx off を実行していたかも。)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

私ならspoolとPerlを使います。 バッチファイルで sqlplus ユーザー名/パスワード @スクリプトファイル でスクリプトファイル内でspoolコマンドでファイル名指定してselect文結果を格納します。 皇族のPerlコマンドE perl スクリプトファイル名 spoolの出力ファイル名として perlスクリプト内で use File::Path; while(<>){ chomp; $_ =~ /([a-z]:\\.*[^ ])/i; $dat = $1; $dat =~ s/\\/\//g; if (rmtree[$dat] ){ print $dat," Delete.\n"; } else { print $dat," rmtree Error: $!\n"; } } とします。

riodio
質問者

お礼

ありがとうございます! 私もSQLの結果を一旦ファイルに入れるのがよいかとおぼろげに思っていたので、自信が持てました。早速試させていただきます。