• 締切済み

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

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

  • Oracle
  • 回答数2
  • ありがとう数1

みんなの回答

  • 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の結果を一旦ファイルに入れるのがよいかとおぼろげに思っていたので、自信が持てました。早速試させていただきます。

関連するQ&A

  • ファイルから直接SQLを実行するコマンドを教えてください。

    SQL文を書いて保存してある C:\SQL\abc.sql というファイルがあるとします。 これを直接実行したいんですが、どういうコマンドを打てば良いのかわかりません。 誰かわかる方は教えてください。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • SQL実行結果取得

    バッチファイルにて、 sqlplusコマンドにより*.sqlファイルを実行し、 SQL文を発行していますが、 実行結果(処理件数)をコマンドプロンプト上 に表示したいのですが、どなたか。手法をご存知では ないでしょうか?

  • コマンドプロンプトのリダイレクト方法

    コマンドプロンプトで、フォルダ名を一旦 foldername.txt に書き出してから、 リダイレクトでコマンドの入力を、ファイルから読み取る、という事をしたいのですがうまくいきません。 dir /b > C:\\foldername.txt で、フォルダ名を取り出してから、(foldername.txt には MAY-07 と記述されます) cd < C:\\foldername.txt > C:\\aaa.txt (cd MAY-07、と記入されたaaa.txtを作成したい) ですが、実際に実行してみると、 cd 0<C:\\foldername.txt 1 > C:\\aaa.txt となってしまいます。。 (aaa.txtには、cd(空白) としか記入されていません) どうしてでしょうか?(´Д⊂ ちょっと質問の意図が分かりづらいでしょうか…; 申し訳ありません; お分かりになる方がいらっしゃいましたら、どうかご教授お願い致します!

  • 複数コマンドの実行結果をテキストに出力したい

    バッチファイルで実行した結果をテキストに出力したいです。 コマンド一個であれば問題ないのですが、複数実行した結果をテキストに出力しようと以下の内容でバッチファイルを作ったのですが、実行すると最後のipconfigだけしか出力されませんでした。 複数コマンドの実行結果すべてを出力するためにどこを修正すればよろしいでしょうか。 hostname & wmic bios get serialnumber & ipconfig > C:\Users\user\desktop\%COMPUTERNAME%.txt

  • SQL*Plus:SPOOLコマンドでのSQL出力

    Oracle SQL*Plusで、SPOOLコマンドを使用すると、SQL実行の結果はファイルに出力されますが、実行したSQL自身が出力されません。 SETコマンドで制御できるのではないかと思いましたが、ちょっと見当たりませんでした。 何か方法はないでしょうか? よろしくお願いします。

  • フォルダ下のファイルとフォルダを全て削除したい

    指定したフォルダ配下のファイルとフォルダを、一括ですべて削除したいのです(指定したフォルダは残します)。DELコマンドでも、RMDIRコマンドでもできません。なにかいい方法がありますでしょうか。

  • バッチでのSQL実行結果の分岐処理について。

    バッチでのSQL実行結果の分岐処理について。 お世話になっております。 バッチからsqlを実行してその結果によってそれ以降のバッチ全体の処理を停止させる方法を考えています。 手がかりがつかめずまったく先に進めないためアドバイスをいただけますでしょうか。 バッチの内容(start_del.bat) -------------------------------------------------------- osql -i.\del.sql -o c:\wk\log.txt -S gold -E osql -i.\create.sql -o c:\wk\log.txt -S gold -E ------------------------------------------------------------ SQLの内容(del.sql) ------------------------------------------------------------ BEGIN TRANSACTION; DELETE FROM LDDB.dbo.test WHERE b='0'; IF @@ERROR = 0 <--エラー判定にこのコマンドを使おうと考えました BEGIN *********************** END ELSE BEGIN ********************** END COMMIT TRANSACTION; ------------------------------------------------------------ 処理の概要: 1.バッチで最初にdel.sqlを実行します。 2.del.sqlの実行が失敗すれば、2つ目のバッチであるcreate.sqlは実行ささずに、バッチを終了させます。 *ポイントはdel.sqlの結果というのは、バッチからdel.sqlを実行できたかではなく、del.sqlの実行結果を判断するという点です。 教えていただきたいこと ・del.sqlの実行後、制御がバッチに戻ったときに、結果を確認してバッチを継続させるか終了させるかを判断させる方法はどのような仕組みを作ればいいのでしょうか。 Windows2003サーバーで、SQLServerは2005です。 初心者のためよく分かっていないことが多すぎで申し訳ありませんが、アドバイスをいただけますでしょうか。 よろしくお願いいたします。

  • VB6でのSQL実行について

    VB6でのSQL実行について VB6でのSQL実行について困っています。 SQL文を作成し、ダイナセットで実行している最中にも 再度別のSQL文をダイナセットで実行することは可能なのでしょうか? 言語はVB6.0、DBはOracle9iを使用しています。 イメージ的にはこんな使い方をしたいです。 dim lngRecordRow1 as long 'レコード数1 dim lngRecordRow2 as long 'レコード数2 dim OraDynaset1 As OraDynaset dim OraDynaset2 As OraDynaset dim strSQL as string 'SQL文 dim lngCnt1 as long 'ループカウンタ1 dim lngCnt2 as long 'ループカウンタ2 strSQL= ---SQL文作成1回目--- Set OraDynaset1 = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行1回目 lngRecordRow1 = OraDynaset1.RecordCount for lngCnt1 = 1 to lngRecordRow1 '--- 処理 --- strSQL= ---SQL文作成2回目--- Set OraDynaset2 = OraDatabase.CreateDynaset(strSQL, ORADYN_READONLY) 'SQL文実行2回目 lngRecordRow2 = OraDynaset2.RecordCount for lngCnt2 = 1 to lngRecordRow2 '--- 処理 --- next lngCnt2 next lngCnt1 1回目で取得したSQL実行結果を行単位でループをまわしつつ、1回目で取得したレコードの結果を条件に使用して別のSQL文を作成し、ループをまわしている最中に実行したいです。 その際、2回目のSQLの結果が2レコード以上の場合、さらにループをまわして条件判別をしたいです。 かなり困っています。回答待ってます。

  • SQL*Plusの実行結果にSQL文も残したいです

    SQL*Plusをスクリプトファイルを使って実行した際、実行SQLの出力はできないものでしょうか? 以下のようにスクリプトファイルを使ってSQL*Plusを実行し、その結果をログファイルへ 残しています。この時ログファイルには、実行結果は出力されるのですが、実行SQLは 出力されないようです。なんとかして実行SQLと、実行結果を作業ログとして残したいと 考えているのですが、何かよい方法はないものでしょうか? [ama@rh01 test]$ sqlplus scott/tiger@orcl @test01.sql > test01.log ■環境 Red Hat Linux 4 Oracle10g ■以下test01.sqlの中身です。 ---ここから-------------- create table ex01 ( c1 number, c2 varchar2(10), c3 varchar2(40) ); insert into ex01(c1,c2,c3) values(1,'AA1','BBB1'); select * from ex01; update ex01 set c2='aa1' where c1 =1; select * from ex01; exit; ---ここまで-------------- ■以下ログファイルの中身です。 ---ここから------------------ [ama@rh01 test]$ cat test01.log 省略 With the Partitioning, OLAP and Data Mining options に接続されました。                       ←ここにcreate文を出力したいです。 表が作成されました。                       ←ここにinsert文を出力したいです。 1行が作成されました。                       ←ここにselect文を出力したいです。 C1       C2   C3 ---------- ---------- ---------------------------------------- 1        AA1   BBB1                       ←ここにupdate文を出力したいです。 1行が更新されました。                       ←ここにselect文を出力したいです。 C1      C2 C3 ---------- ---------- ---------------------------------------- 1 aa1 BBB1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。 [ama@rh01 test]$ -------------------ここまで--------------- どなたか良いアドバイスいただけたらと思います。 どうぞよろしくお願いします。

  • ubuntuのコマンドをファイルから実行したい

    ubuntu初心者です。 ターミナルのコマンドを自動的に複数実行するために、ファイルを読み込ませて、コマンドを実行したいのですが、そんなことできますか? イメージとしてはDBでSQL文が書かれたファイルを実行する感じです。