597) 複数のSQLを実行するには。 ケイ 2003/09/09(火) 11:20 |
|
はじめまして、ケイです。 過去ログで探したのですが、どうもよくわからないので質問させていただきます。 フォルダの中にある複数のストアドプログラムファイルを一度に流したいのですが、以下のようにした場合、フォルダ内の一番最初のストアドプログラムしか実行されません。 フォルダの中をLoopするにはどうしたらよいのでしょうか? よろしくお願いします。 パッケージがあるディレクトリ Set a=@D:\SP\ ヘッダーファイル for %%f in (*.h) do sqlplus UserName/Password@接続文字列 %a%%%f 本体ファイル for %%f in (*.pkg) do sqlplus UserName/Password@接続文字列 %a%%%f |
|
598) Re:複数のSQLを実行するには。 ふぇむ 2003/09/09(火) 11:56 |
|
>フォルダの中にある複数のストアドプログラムファイルを一度に流したいのですが、以下のようにした場合、フォルダ内の一番最初のストアドプログラムしか実行されません。 OSは何ですか? NT4.0だと、for 文の do 以降の実行文次第で for ループが終わってしまうようなことがあったような気がします。 ためしに、 for %%f ... do call :DO_SQLPLUS UserName/Password@接続文字列 %a%%%f goto :end :DO_SQLPLUS set CONNECT_STR=%1 set SQL_SRC=%2 sqlplus %CONNECT_STR% %SQL_SRC% goto :eof :end みたいに、1段階実行ブロックを分離してみてはどうでしょうか。 さらに言えば、この構造の for 文だと、1回ごとに接続・切断を繰り返すため非効率なので、例えば次のような感じで echo -- SQLs > %SQL_SRC% for %%f in (*.h) do echo %a%%%f >> %SQL_SRC% for %%f in (*.pkg) do %a%%%f >> %SQL_SRC% (ちょっとうろおぼえなんで、セミコロンとか / とか必要だったら付加してください) sqlplus UserName/Password@接続文字列 %a%SQL_SRC% みたいな、1つの実行文をまず作成してから実行するような構造にしてはどうでしょうか。 |
|
599) Re2:複数のSQLを実行するには。 ケイ 2003/09/09(火) 12:22 |
|
ふぇむさん、回答ありがとうございました。 >OSは何ですか? Win2000です。 先ほど教えていただいた最初の方のやり方なのですが、 for %%f in (*.h) do call sqlplus UserName/Password@接続文字列 %a%%%f for %%f in (*.pkg) do call sqlplus UserName/Password@接続文字列%a%%%f でやっていた、実行したいファイルの(*.h)や(*.pkg)は、どこへ書くのでしょうか? 既存であったものを改造しているので、私はまったくの初心者です。 すみませんが、もう1度よろしくお願いします。 >for %%f ... do call :DO_SQLPLUS UserName/Password@接続文字列 %a%%%f >goto :end > >:DO_SQLPLUS > set CONNECT_STR=%1 > set SQL_SRC=%2 > sqlplus %CONNECT_STR% %SQL_SRC% > goto :eof > >:end |
|
601) 自己レス ケイ 2003/09/09(火) 14:47 |
|
ふぇむさんへ ケイです。 先ほどの質問なんですが、いろいろやっていて 自分の書いているSPの方の書き方が悪かったことに気が付きました。 DOSで自分でEXITを打たないと次へ進まなかったのですが、 自分のSPの最後にEXITをつけたら一気に流れるようになりました。 ありがとうございました。 |
|
602) Re3:自己レス ふぇむ 2003/09/09(火) 15:05 |
|
>DOSで自分でEXITを打たないと次へ進まなかったのですが、 >自分のSPの最後にEXITをつけたら一気に流れるようになりました。 ああ、sqlplusを抜けるように書いていなかったということですね。 いずれにしても先ほどの1回づつ Oracle Session の接続・切断を繰り返すような実行の方法はあまりよくないと思いますよ。 |