SQL*Loaderで条件によりロードする値を変更するには、
CASE~WHEN句を使用できます。
サンプル
例として、ロードした値が空文字の場合は'***'に置き換えてみます。
以下のCSVファイルとテーブルを例にします。
- (test.csv)
- NAME_JP,NAME_EN みかん,Orange かき, りんご,Apple ぶどう,
制御ファイル(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にする ( --テーブルの列 NAME_JP, NAME_EN "CASE WHEN :NAME_EN IS NULL THEN '***' ELSE :NAME_EN END" --NAME_ENがNULLの場合は'***'と表示する ) |
11行目で変換処理を行っています。
実行コマンド
- 実行例
- C:¥>sqlldr usr01/usr01@db01 control=c:¥test.ctl
実行結果
NAME_JP | NAME_EN |
---|---|
みかん | Orange |
かき | *** |
りんご | Apple |
ぶどう | *** |
「かき」と「ぶどう」は値が存在しないため、***に置き換えられます。
解説
- ロード時に条件を設けたい場合は、CASE~WHEN句が使用できます。
- CASE句の書式は、通常のSQL文で使用するCASE句と同じです。