SQL*Loaderで値を置換して取り込むには、REPLACE関数を使用します。
サンプル
以下のCSVファイルからロードしてみます。
- (test.csv)
- NAME1,NAME2 なまえ1,APPLE なまえ2,PERSIMMON なまえ3,BANANA
制御ファイル(ctlファイル)
1 2 3 4 5 6 7 8 9 10 11 12 |
OPTIONS (SKIP=1) --1行目は取り込まない(タイトル行のため) LOAD DATA CHARACTERSET JA16SJIS --文字コードはSJIS INFILE 'C:¥test.csv' --取り込みファイル TRUNCATE --テーブルをTRUNCATEしてから取り込む INTO TABLE tbl_test --テーブル名 FIELDS TERMINATED BY ',' --区切り文字はカンマ TRAILING NULLCOLS --データなしの場合はNULLにする ( --テーブルの列 NAME1, NAME2 "REPLACE(:NAME2, 'A', 'X')" --'A'を'X'にREPLACEして取り込む ) |
11行目で置換(REPLACE)を行っっています。
実行コマンド
- 実行例
- C:¥>sqlldr usr01/usr01@db01 control=c:¥test.ctl
実行結果
NAME1 | NAME2 |
---|---|
なまえ1 | XPPLE |
なまえ2 | PERSIMMON |
なまえ3 | BXNXNX |
'A'が'X'に置換されました。
解説
- 値を置換して取り込みたい場合は、
「"REPLACE(:<カラム名>, '<置換前文字>', '<置換後文字>')"」を指定すればOKです。 - 複数種類の文字を置換したい場合は、REPLACEをネストさせればOKです。
(例)REPLACE(REPLACE(:NAME1, 'A', 'X'), 'B', 'Y') - ダブルクォーテーションなど特別な意味を持つ記号を対象としたい場合は、ASCIIコードで指定すればOKです。
(例)ダブルクォーテーションを'X'に置換する
→ REPLACE(:NAME1, CHAR(34), 'X')