- PR -

コマンドプロンプトにてSQLPLUSを実行

1
投稿者投稿内容
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 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を使用されたことがある方など
アドバイスをいただければ、幸いでございます。









crab
会議室デビュー日: 2006/12/25
投稿数: 11
投稿日時: 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
のように変える。

IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 2007-03-06 19:40
crabさん、ご返答ありがとうございました。

CRABさんのアドバイスを参考にさせていただき、テストしたいと
思います。

以上、よろしくお願いいたします。
IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 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!
と記載し、変数が入っていることも確認できたのですが、
どうもアウトプットで失敗してしまいます。


依然、記載の仕方がまずいのでしょうか?




IPホン
大ベテラン
会議室デビュー日: 2005/09/13
投稿数: 127
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)