• 締切済み

SQL*LoaderのDATA引数

Shellからsqlldrコマンドを実行する際に複数のロードファイル名を引数として渡したい。 しかし、コマンドラインから実行する際にデータ引数は複数指定できないと言われます。 ということは、制御ファイル内のINFILEに複数ファイル名を指定しないといけないと思うのですが、 ロードファイル名は固定ではなく、複数の場合もあれば1つの場合もあります。 詳しく説明させていただきますと、Shellで他のFTPサーバーから取得したCSVのフルパスをすべて取得しそれを制御ファイルのINFILEに渡したいのです。 なにか良い方法はありますでしょうか? ご存知の方がいればご教示いただきく存じます。 よろしくお願いいたします。

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

みんなの回答

  • yorozu_ya
  • ベストアンサー率54% (76/140)
回答No.1

1案:Shellでファイルを一つずつ順次処理する。 2案:Shellでファイルを一つに結合する。 3案:Shellで制御ファイルを作る。

関連するQ&A

  • SQL Loaderを使いたい

    Oracleのバージョンは8、自分のPCには Oracle8Client(Application User) がインストールされています。 見よう見まねで制御ファイルを記述し、バッチファイルを作成したところ、 ( sqlldr USERNAME/PASSWORD@SID control= test.ctl ) コマンドプロンプトには以下のように表示されました。 「C:\SQL>sqlldr USERNAME/PASSWORD@SID control = test.ctl 'sqlldr' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません。」 実行できない原因はどこにあるか教えてください。 1.そもそもSQL Loaderを利用できる環境になっていない (そのままでは使えなくて何かしら設定が必要とか) 2.コマンドがまちがっている (test.ctlのパスを記述しないとだめとか、SIDは要らないだとか) 3.制御ファイルがまちがっている どの可能性が一番高いでしょうか?

  • SQL*LOADER 最終列のLENが1

    お世話になります。 前提として 次のようなctlファイルがあります。 OPTIONS(ROWS=500,BINDSIZE=700000) LOAD DATA INFILE '/home/oracle/TEST/00_BIN/YOSAN.csv' TRUNCATE INTO TABLE MT_YOSAN ( 日付 TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', 店舗コード TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"', 予算 TERMINATED BY ',' NULLIF 昨年実績=BLANKS, 昨年実績 NULLIF 昨年実績=BLANKS ) ロード対象のCSVですが、次のようなROWデータになります。 "2011/02/22","01010",30000,25000 テーブル仕様は次のようになっています。 日付      VARCHAR2(20) NOT NULL 店舗コード  VARCHAR2(20) NOT NULL 予算      NUMBER(10) 昨年実績   NUMBER(10) これを実行した際に昨年実績のカラムに25000の先頭の2しかロードされません。 ログファイルを開くと他のLenは*に対して最後の昨年実績列は1が設定されていました。 この事象の原因と対処法がわかる方がいればご教示いただきたく存じます。 よろしくお願いいたします。 またsqlldr実行時は引数controlとlogのみ指定しています。

  • SQL*Loaderについて2

    以前質問した内容と似ているのですが、 ロード元のCSV内に小数点2位までの数字が入った項目あるのですが これをNUMBER(10)のテーブルにロードするとエラーが出ます。 なので制御ファイル内のロード先列指定部分で 金額 "trunc(:金額,0)" で小数点を切り捨てようとしたところ数値が無効エラーがでます。 うまいこと小数点を省いてロードするためにはどうしたらいいですか?

  • SQL*Loaderについて

    ",2010/11/27 16:25," このような形式の日付データをsqlldrでテーブルにインポートする際に 制御ファイル内の項目設定部分で 売上日付 "to_char(:売上日付,'YYYY/MM/DD')", とすると数値のエラーが出ます。 テーブル側の当該項目のデータ型はVARCHAR2です。 ちなみに 売上日付 "substr(:売上日付,1,10)", にすると問題なくロードできました。 が、2010/12/3のような形で丸められるため都合が悪いです。 YYYY/MM/DDでロードするにはどうしたらいいでしょうか?

  • SQL*Loaderの制御ファイルについて

    改行を含むデータをLoaderで投入したいのですがうまくいく方法を伝授ください。 レコードは以下です。先頭のみ"無し、末尾は","<CRLF> 3カラム目の先頭が半角スペースで、<CRLF>がきてXXXというデータです。 いろいろ試しましたが、どうもうまくいきません。 このデータをエラー無くロードできる方法はないでしょうか? ご教授ください。 ◆CSVレコード 99999","a-1"," <CRLF>Name-A あいうえお","<CRLF> ◆制御ファイルは以下指定 LOAD DATA INFILE XXX.CSV "STR x'0D0A'" APPEND CONTINUEIF LAST != '"' INTO TABLE table_name FIELDS TERMINATED BY '\",\"' TRAILING NULLCOLS ( COL1, COL2, COL3 ) ちなみに3カラム目が<LF>だとうまくいきます。。。

  • バッチファイルを起動したけど、win98では引数が長すぎて。。。

    VBからバッチファイルを起動する処理を作成中です。 SHELL コマンドで実行しているのですが、 そのバッチファイルの引数がすごく長いのです。 >batch.bat "引数1" "引数2" "引数3" とする際、引数1 ~ 引数3までの合計文字列が 128?byte を超えてしまい、 win98では、使えないプログラムがあります。 複数の引数をまとめたファイルを、バッチファイルの 引数として起動させる等、 回避作はあるのでしょうか? 教えてください。

  • SQL-Loaderが動かないです。

    みなさんこんにちは 作成されたデータをSQL-Loaderにてオラクルデータベースに取込み を行います。 下記にソースを書きましたが、まずTEST.batファイルを実行し、 TEST.bat側からTEST.ctlを実行し、TEST_WORKテーブルにデータを 格納します。 *****TEST.batの内容***** SQLLDR USERID=TEST1/TEST1@GUEST CONTROL=TEST.ctl LOG=LOG.txt ************************ *****TEST.ctlの内容***** LOAD DATA INFILE 'D:\test1.dat' TRUNCATE PRESERVE BLANKS INTO TABLE TEST_WORK FIELDS TERMINATED BY "|" TRAILING NULLCOLS (KOUMOKU1, KOUMOKU2, KOUMOKU3, KOUMOKU4) ************************ 実際にこれを実行した所、問題なく正常終了しました。 しかし、これをホスト側からFTPにて実行を行うと、 TEST.batが実行されません。もちろんログも出力されません。 ファイルが実行できてないので、ファイルのコピーを行う簡単 なバッチファイルを作成し、ホスト側から実行を行ってもらった 場合、こちらは問題ありませんでした。 となると、SQL-Loaderのソースに何か問題があるのでは?と 思いますが・・・色んなサイトでLoaderのソースを拝見しましたが、 見当がつかないです。 ソースを見て、気になる点や、同じ経験をされた方いらっしゃい ましたら、お知恵をお貸しください。 ちなみに、SQL-Loaderを実行するマシンのOSはWindows2000Proです。 よろしくお願いします。

  • sql*loader 数値のロード

    SQL*LOADERにて NUMBER(3,0)のフィールドに、小数点以下を含む数値をもったデータをロードすると 四捨五入か何かされて整数でデータがロードされてしまいます。 テーブル、CTLファイル、csvレコード、登録結果は以下のとおりです。 テーブル: CREATE TABLE tbl1 ( CLM001 NUMBER(3,0) NOT NULL, CLM002 VARCHAR2(30) ) CTLファイル: LOAD DATA INFILE 'tbl1.csv' BADFILE 'tbl1.bad' TRUNCATE INTO TABLE tbl1 FIELDS TERMINATED BY ',' TRAILING NULLCOLS ( CLM001, CLM002 ) csvレコード: 0.9,aaaaa 3.1,bbbbb 登録結果(SQL*LOADER実行結果): 1,aaaaa 3,bbbbb 小数点を含むデータをロード時にエラーとしたいのですが、何かいい方法ありますでしょうか? 環境はSQL*Loader: Release 9.2.0.1.0になります。

  • SQL*Loader 別フィールドのデータを編集

    SQL*LoaderでCSVをインポートする際に、 次のようなCSVデータがあるとします。 DENPYO_NO | SALES_QTY | PRICE  1001-01-0001     1      2000 1001-01-0002     2      4000 このデータのDENPYO_NOフィールドの左4桁を取得して別のフィールドにインポートすることは 可能でしょうか? 説明がわかりにくいと思いますが、テーブルに取り込んだ時に以下のようにしたいです。 SECTION | DENPYO_NO | SALES_QTY | PRICE 1001     1001-01-0001     1      2000 1001     1001-01-0002     2      4000 要は一つのCSVフィールドを使用して、複数のテーブルフィールドを更新可能か? ということです。また、そのときの制御ファイルのフィールド項目の定義はどのように記述したらよいのでしょうか? よろしくお願いします。

  • 【SQL*Loader】固定長データのロードについて

    SQL*Loaderで固定長データを項目を指定してDBへロードしたいのですが・・・ 10件の項目があって例えば、 「A,B,C,D,E,F,G,H,I,J」とします。(全部6ビットでCHAR型とします。) このうち、「A,B,C,F,G,H」を指定してロードしたいとき、 おそらく「POSION」を使って制御ファイルを作成すると思います。 実際制御ファイルを作ってロードを試みたところ、 確かにDやEをすっ飛ばして、ロードできたました。 ところが、指定しなかった項目で残りの最後の項目であるIやJが 次のレコードとして認識されてしまうのです。 つまり、「A,B,C,F,G,H」を最初のレコードとして認識し、 続いて「I,J」をレコードとして認識しているのだと思います。 たぶん、IやJも指定してロードするとうまくいく気がします・・ でもI,Jはロードしたくない項目なのです・・・ このI,Jの前、つまり指定項目の最後のHでレコードを切って ここで一つのレコードとして終わらせるようにするような方法がないか 探しております。 どなたかご教示いただければと思います。 よろしくお願いします。