Sql Loaderで列の読み飛ばし方がわからなくてハマったので、解決法をメモしておく。
環境:Oracle 11g
※環境が手元にないのでコードは未テストです。
テーブルの読み飛ばし方
【やりたいこと】
下記のようなCSVのデータがあった時に、テーブル側の列(B,D)を読み飛ばす。
CSVのデータ
A,C,E
テーブル
列A,列B,列C,列D,列E
sample.CTL
省略...
(
A
,B CONSTANT ' '
,C
,D COSTANT ' '
,E
)
正確には読み飛ばすのではなく、テーブルの項目数にCSVの項目数が合うように定数などを編集します。
本当は項目の初期値を設定できればよかったのですが、やり方がわかりませんでした(orz
どうやら、CONSTANTを指定するとCSVを読み進める代わりに
定数を読み込んでくれるようです。(テーブルの列BならCSVのCの代わりに定数' ')
なので、上記の場合CSVとテーブルの項目のマッピングは以下のようになります。
テーブル|CSV
列A|A
列B|' '(定数)
列C|C
列D|' '(定数)
列E|E
※定数以外でも同じようなことができるかは未調査。
CSVの読み飛ばし方
【やりたいこと】
下記のようなCSVのデータがあった時に、CSV側の列(B,D)を読み飛ばす。
CSVのデータ
A,B,C,D,E
テーブル
列A,列C,列E
sample.CTL
省略...
(
A
,"B" filler
,C
,"D" filler
,E
)