- - PR -
コマンドプロンプトにてSQLPLUSを実行
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-03-06 16:57
<OS Windows2000 Pro SP4>
<DB Oracle8i enterprise> <Oracle Client Oracle9i> いつもお世話になっております。 コマンドプロンプトとSQLPLUSに絡んだ質問ですが、現在、コマンドプロンプトで 以下のようなスクリプトを記載しております、 行っていることは、検索対象ファイルの数によってその回数分、SQLLoaderでテーブルに インサートし、そのインサートされたデータを一部加工してselect文にてアウトプット するというものです。 <コード> for /F "tokens=*" %%z in ( 'dir D* /b' ) do ( <-対象Fileは2つ用意 Set DDFile=D%%z <-Outputにて使用 Rename C:\Test\%%z %%z.dat Call C:\SQLLod\Lod.bat %%z <- SQLLoaderを実行 Move C:\Test\*.dat C:\BK\ <-別フォルダに移動 echo @C:\Output\Out.sql C:\Output\%DDFile%.txt >> C:\Work\enter1.dat type C:\Work\enter1.dat | sqlplus -s user/pass@dbname <-Spoolを使用してOUTPUT ) コメント行も含まれていますが、このような感じとなっております。 一つ目のファイルにおいては、SQLLOADER、selectでのアウトプット共に処理される のですが、2つ目のファイルにて、SQLLOADERは問題ないのですが、selectでのアウトプット時に、%DDFile%という変数にファイル名が入らなくて困っています。 コマンドプロンプトにて、SQLPLUSを使用されたことがある方など アドバイスをいただければ、幸いでございます。 |
|
投稿日時: 2007-03-06 18:20
これは遅延環境変数の問題でしょう。
環境変数は、通常コマンドの実行時ではなくテキスト行を読み取るときに展開されます。 細かい説明は省きますが、遅延環境変数を有効にするためには、 (1) コマンドプロンプトの画面を出すときに、cmd /v:on とする (2) バッチファイル内で環境変数を参照するときには、%ではなく感嘆符(!)を使う をやってみてください。 参考URL http://d.hatena.ne.jp/ir9Ex/20060822/1156211586 >echo @C:\\Output\\Out.sql C:\\Output\\%DDFile%.txt >> C:\\Work\\enter1.dat を echo @C:\\Output\\Out.sql C:\\Output\\!DDFile!.txt >> C:\\Work\\enter1.dat のように変える。 |
|
投稿日時: 2007-03-06 19:40
crabさん、ご返答ありがとうございました。
CRABさんのアドバイスを参考にさせていただき、テストしたいと 思います。 以上、よろしくお願いいたします。 |
|
投稿日時: 2007-03-07 12:38
遅延環境変数を使用してテストを行ってみましたが、最後のSQLPlusでのアウトプット
(select文)がどうもうまくいきません。 echo @C:\Output\Out.sql C:\Output\%DDFile%.txt >> C:\Work\enter1.dat →%DDFile%を!DDFile!に修正。 また、forの後に Set DDFile=D%%z echo !DDFile! と記載し、変数が入っていることも確認できたのですが、 どうもアウトプットで失敗してしまいます。 依然、記載の仕方がまずいのでしょうか? |
|
投稿日時: 2007-03-07 13:59
先ほどの自己レスの追記ですが、
echo @C:\Output\Out.sql C:\Output\!DDFile!.txt >> C:\Work\enter1.dat にて、enter1.datというファイルには、 @C:\Output\Out.sql C:\Output\DDXXXX.txtというような感じで書き込みはできている (ファイル名が取得できている)のですが、SQLPLUSでの実行にてアウトプットが指定パス 先に(ここでは、C:\Output\)に保存されないのです。 |
1