SQL*Loaderを利用するにあたって、制御ファイルの個人的に忘れがちな機能を自分用にメモしておきます。
例: employee1.csvとemployee2.csvをemployeeテーブルにロードする
employee.ctl
OPTIONS (
SKIP = 1,
LOG = 'employee.log'
)
LOAD DATA
CHARACTERSET UTF8
1 INFILE 'employee1.csv'
1 INFILE 'employee2.csv'
BADFILE 'employee.bad'
DISCARDFILE 'employee.dis'
TRUNCATE INTO TABLE employee
2 TIMESTAMP FORMAT 'YYYY/MM/DD HH24:MI:SS'
FIELDS TERMINATED BY ','
(
3 employee_id SEQUENCE(100, 1),
4 first_name "UPPER(:first_name)",
5 middle_name FILLER,
last_name,
6 updated_date SYSDATE,
7 updated_user CONSTANT 'SYSTEMUSER'
)
- INFILEは複数指定することができます
- DATE型・TIMESTAMP型のフォーマットを指定したい場合は
DATE FORMATやTIMESTAMP FORMATを指定します。 - 連番を発番したい場合はSEQUENCEを指定します
- RECNUMを利用すると、連番の発番に入力ファイルの行数を参照することもできます
- ダブルクォートで囲むことで、SQL関数を利用することができます
- バインド変数で指定できるものには制約があります。たとえばFILLERを指定したフィールドはバインド変数に指定できません
- バインド変数は必須ではありません (例
update_date "TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS')")
- 読み飛ばしたいフィールドがある場合は、FILLERを指定します
- 現在時刻を参照したい場合は、SYSDATEを指定します
- 固定値を指定したい場合は、CONSTANTを指定します
これ以外にもSQL*Loaderにはさまざまな機能が用意されています。SQL*Loaderの利用で何か困ったら、以下のドキュメントをざっと読むとよいかと思います。