SQL*Loaderは、CSVファイルなどのファイルからOracleデータベースにデータを取り込むコマンドである。
sqlldr keyword=value [, ...]
keywordに指定できるキーワードの一覧を以下に示す。
不良ファイル名を指定する。不良ファイルは、ロード中にエラーとなったレコードが出力されるファイルである。
バインド配列の最大サイズをバイト単位で指定する。
行数を指定してダイレクト・パス配列に割り当てる。
コントロールファイル(ctlファイル)の名前を指定する。コントロールファイルは、データのロード方法を記述したテキストファイルである。
$ sqlldr CONTROL=example.ctl
Username: tsuka
Password: mellon
データファイル名を指定する。データファイルは、ロードするデータが入っているファイルである。
廃棄ファイルのパス名を指定する。制御ファイルに指定されているレコード選択基準に一致しなかったレコードは、ロード対象から除外され、データベースのどの表にも挿入されない。これらのレコードは廃棄ファイルに格納される。
廃棄レコードの最大数を指定する。廃棄レコードがの件数に達すると、ロードは中止される。
許容するエラーの数を指定する。
ログファイル名を指定する。ログファイルは、ロード処理に関するログ情報が出力されるファイルである。
データファイルからデータを読み込む場合の読み取りバッファサイズを指定する。制御ファイルから読み込む場合は、常に64キロバイトである。
1回にコミットする行数を指定する。
ダイレクト・パス・ストリームに対して、サイズをバイト単位で指定する。
Oracleのユーザ名とパスワードを指定する。
sqlldr userid=scott/tiger
SQL*Loaderの実行例を示す。
sqlldr userid=marina/horiuchi, control=employee.ctl, data=employee.dat, log=employee.log, bad=employee.bad errors=0 rows=999
SQL*Loader のコントロールファイル(ctlファイル)は、SQL*Loaderジョブ用のデータ定義言語(DDL)命令を含むテキスト・ファイルである。
コントロールファイルの例を以下に示す。
-- This is a sample control file
LOAD DATA
INFILE 'sample.dat'
BADFILE 'sample.bad'
DISCARDFILE 'sample.dsc'
APPEND
INTO TABLE emp
WHEN (57) = '.'
TRAILING NULLCOLS
(hiredate SYSDATE,
deptno POSITION(1:2) INTEGER EXTERNAL(2)
NULLIF deptno=BLANKS,
job POSITION(7:14) CHAR TERMINATED BY WHITESPACE
NULLIF job=BLANKS "UPPER(:job)",
mgr POSITION(28:31) INTEGER EXTERNAL
TERMINATED BY WHITESPACE, NULLIF mgr=BLANKS,
ename POSITION(34:41) CHAR
TERMINATED BY WHITESPACE "UPPER(:ename)",
empno POSITION(45) INTEGER EXTERNAL
TERMINATED BY WHITESPACE,
sal POSITION(51) CHAR TERMINATED BY WHITESPACE
"TO_NUMBER(:sal,'$99,999.99')",
comm INTEGER EXTERNAL ENCLOSED BY '(' AND '%'
":comm * 100"
)
SQL*Loader を実行するときに、キーワードでコントロールファイルを指定する。
$ sqlldr CONTROL=example.ctl
Username: tsuka
Password: mellon