SQL*Loaderのメモ
2018/11/22
コマンドプロンプト
sqlldr userid=ユーザーID/パスワード control=test.ctl
test.ctrl
OPTIONS ( -- コマンドライン引数でも可。コマンドライン引数が優先。
LOAD = ALL, -- ロード対象件数。ALLで全件。
SKIP = 0, -- 先頭からスキップ対象件数。0でスキップなし。
ERRORS = 0, -- エラーの許容数。-1で全てのエラーを無視。
ROWS = -1, -- コミットする行数。パラレル・モードのrowsパラメータは無視される。
DIRECT = TRUE, -- trueでダイレクト・パス・ロード、falseで従来型パス・ロード
MULTITHREADING = TRUE, -- ダイレクト・パス・ロードの場合、マルチスレッドの使用有無
PARALLEL = TRUE, -- パラレルロードの実行
LOG = test.log -- ログファイル
)
LOAD DATA
CHARACTERSET UTF8 -- Shift_JISはJA16SJIS
INFILE 'test.csv' -- ロードするファイル
BADFILE 'test.bad' -- エラーファイル
APPEND -- or INSERT/REPLACE/TRUNCATE replaceとtruncateはテーブルをすべて消去してロードする
INTO TABLE table_test
FIELDS TERMINATED BY "," -- ファイルの区切り文字。TabはX'09'、スペースはWHITESPACE
TRAILING NULLCOLS -- 未指定項目はnull
(
COL_A,
COL_B "TO_DATE(:column_B, 'YYYY/MM/DD HH24:MI:SS')", -- to_dateしたい場合
COL_C DATE 'YYYY/MM/DD HH24:MI:SS',
COL_D CONSTANT "NNN", -- 文字を入れる
COL_E SYSDATE,
COL_F NULLIF COL_A=BLANKS -- COL_AがBLANKSの場合に、null
)
表は作成しておく必要がある。
パスはSQL*Loaderを実行するディレクトリからの相対パス。
Oracle 11gで動作確認してみた。