• ベストアンサー

SQL*LoaderでCSVから指定した列のみインポートしたい。

SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはカンマ区切りのCSVファイルです。 入力CSVファイルは他テーブル用のファイルなので、 ローダーで落とし込むテーブルとは列数が異なります。 ですので、「CSVの5列目の値をテーブルのAA_NOというフィールドに 格納する。ということが可能なのでしょうか?」 CSVファイルのある行が a,b,c,d,e,f というデータの場合、テーブルには a,e,f とインポートしたいのです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hamu1
  • ベストアンサー率66% (2/3)
回答No.2

さきほど回答しましたhamu1です。 訂正します。 a,b,c,d,e,f というデータの場合、テーブルには a,e,f をインポートするときには、 (略) ( a, "b" filler, "c" filler, "d" filler, e, f ) となります。 間違えちゃって、、すいません。

cobacoba
質問者

お礼

hamu1さん、こんばんは。 理解するのに時間がかかりましたが、なるほどやっとわかりました。 TRAILING NULLCOLSの後の括弧の中には、 CSVの項目に対する設定なんですね・・・。 ずっとテーブルのカラムに対する設定だと思ってました・・・。 今まではテーブルもCSVも項目数が同じなので気づきませんでした。 上記の方法でインポートすることが出来ました。 これでまた一つ頭が良くなりました。 ありがとうございました。

その他の回答 (1)

  • hamu1
  • ベストアンサー率66% (2/3)
回答No.1

コントロールファイルに下記のように記述すればできますよ。 ↓ここから↓↓ LOAD DATA INFILE 読み込むファイル名 APPEND←インポートモードはご自由に INTO テーブル名 FIELDS TERMINATED BY "," TRAILING NULLCOLS←オプションは好きにしてください。 ( a, ←読み込みたいテーブルのカラム名にしてください "b" filler, "c" filler, d filler, "e" filler, "f" filler ) ↑↑↑↑↑↑↑ こんなかんじです。 捨てたいフィールドには、fillerと書けば読み飛ばします。 ちなみに、 "b" filler, ↑この"b"は別にどんな名称でも構いません。("b1"でも"dummy"と書いても何でもよし) 意味わかりますでしょうか? 是非やってみてください。

関連するQ&A