SQL*Loaderで、取り込み元ファイルの一部の列を読み飛ばして(テーブルには取り込まずに)ロードするサンプルです。
前提
以下のCSVファイルから、以下のテーブルにロードします。
CSVファイルには「備考」列がありますが、この列はテーブルには取り込まず読み飛ばします。
- (商品マスタ.csv)
- 商品コード,商品名,備考,単価,適用日 1001,みかん,国産,30,2021/1/1 1002,りんご,輸入,100,2021/1/2 1003,バナナ,輸入,200,2021/1/3
| 列名 | 型 |
|---|---|
| CD | CHAR(4) |
| NAME | VARCHAR2(20) |
| PRICE | NUMBER(5,0) |
| TEKIYO | DATE |
テーブル「商品マスタ」には、CSVファイルにある「備考」に対応する列がありません。
サンプル
制御ファイル(ctlファイル)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
OPTIONS (SKIP=1) --1行目は取り込まない(タイトル行のため) LOAD DATA CHARACTERSET JA16SJIS --文字コードはSJIS INFILE 'C:¥商品マスタ.csv' --取り込みファイル BADFILE 'C:¥商品マスタ.bad' --batファイル TRUNCATE --テーブルをTRUNCATEしてから取り込む INTO TABLE 商品マスタ --テーブル名 FIELDS TERMINATED BY ',' --区切り文字はカンマ TRAILING NULLCOLS --データなしの場合はNULLにする ( --テーブルの列 CD, NAME, BIKO FILLER, --備考列は読み飛ばす(テーブルには取り込まない) PRICE, TEKIYO ) |
実行コマンド
- 実行例
- C:¥>sqlldr usr01/usr01@db01 control=c:¥syohin.ctl log=c:¥商品マスタ.log
実行結果
| CD | NAME | PRICE | TEKIYO |
|---|---|---|---|
| 1001 | みかん | 30 | 2021/1/1 |
| 1002 | りんご | 100 | 2021/1/2 |
| 1003 | バナナ | 200 | 2021/1/3 |
「備考」列(国産、輸入)はテーブルに取り込まれていません。
解説
- 読み飛ばしたい列には、列名の後ろに「FILLER」を指定します。列名はダミーの名前で構いません(テーブル側に同名の列は不要です)。
- FILLERを指定した列は、ファイルからは読み込まれますが、テーブルへの取り込みは行われません。
- 読み飛ばしたい列がファイルの途中にある場合は、注意が必要です。その列を制御ファイルの列リストから単純に省いてしまうと、後続の列の位置がずれてしまい、意図しない値が取り込まれてしまいます。必ずFILLERとして列リストに記述し、列の対応関係を崩さないようにしてください。
- なお、読み飛ばしたい列がファイルの一番最後にある場合に限っては、その列を制御ファイルの列リストに書かなくても、SQL*Loaderが自動的に無視します。この場合はFILLERを使わなくても問題ありません。