質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

2回答

386閲覧

WindowsバッチのforとIFの中でWhere指定したエクスポートを実行したい

kamiyui_bidan

総合スコア47

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2018/10/05 10:51

編集2018/10/05 15:47

下記を実行すると画面にQUERY~が出力されていない事、及び全然エクスポートが終わらない事から、WHERE条件が効いてないと思われます。
下記のコードの場合、どこにどのようなエスケープ文字を付けるといいのでしょうか?
(^と\をそれっぽい所に付与してみたのですが、ダメでした)

Windowsバッチ

1for /f %%a in (ファイル名) do ( 2 for /f %%b in (ファイル名) do ( 3 IF %%a == "MST" ( 4 EXP user1/pw@db1 FILE=file.DMP LOG=EXP.log tables=(%%b^) QUERY=\"WHERE Col1>=TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYYMM') \" STATISTICS=none 5 ) ELSE ( 6 EXP user1/pw@db1 FILE=file.DMP LOG=EXP.log tables=(%%b^) direct=y 7 ) 8 ) 9)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この場合、parfile で指定しても良いかと思います。
以下のように exp.par ファイルを作成して、

QUERY="WHERE Col1>=TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYYMM')"

以下のように指定する感じですかね。

EXP user1/pw@db1 FILE=file.DMP LOG=EXP.log tables=(%%b^) PARFILE=exp.par STATISTICS=none

抽出条件も動的に変わるようであれば、parfile 自体を動的に作成するなりしないといけないでしょうが。


あと、気になったのが、以下の

IF %%a == "MST" (

IF "%%a" == "MST" ( ```でないと成立しないことないですか? テキストファイルにダブルクォート付きで入っているなら問題ないと思います。

投稿2018/10/06 08:34

編集2018/10/06 09:15
atata0319

総合スコア881

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamiyui_bidan

2018/10/11 07:55

アドバイス、有難うございました。 WHERE文をそのまま書くと冗長になるので、PARFILEを使用する事にしました。 %%aについても、ご指摘の通りでした。
guest

0

QUERY="WHERE KEIVOL_ym>=TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'YYYYMM')"で駄目なら、QUERY=WHERE KEIVOL_ym^>=TO_CHAR(ADD_MONTHS(SYSDATE, -6^), 'YYYYMM'^)ですかね。

投稿2018/10/05 12:30

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamiyui_bidan

2018/10/11 07:52

申し訳ありません。 下記の書き方でWHERE条件は効いてました。 最初にQUERY指定した方が実行されている最中でも、QUERY指定してない方も画面に出力される為、WHEREが効いてないものと見間違えておりました。 tables=(%%b^) QUERY=\"WHERE Col1>=TO_CHAR(ADD_MONTHS(SYSDATE, -36), 'YYYYMM')\"
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問