Geek-Side

Resource > SQL*LOADER

コマンドライン

sqlldr keyward=value
keywardには
  • data データファイル名|拡張子がない場合は.datと判断される
  • LOAD ロードするレコード数

制御ファイル

*** INFILE
データファイルの指定
ファイル名に拡張子を指定しない場合.datと判断される
  • INFILE %%*%%
制御ファイルにデータをBEGINDATA構文で記述する場合

INTO TABLE

ロードする表の指定 INSERT、APPEND、REPLACE、TRUNCATEが指定できる
  • INSERT デフォルトの動作。表を空にする必要がある
  • APPEND 表にデータを追加
  • REPLACE 表を削除してロード
  • TRUNCATE 表を削除してロード。パフォーマンスが高いが参照整合制約を切っておく必要がある。
INTO TABLE tablename APPEND

CONTINUEIF LAST

レコードの終わりを指定できる。
1レコードが複数行のCSVファイルをロードする時等便利。
通常、改行毎に1レコードとして扱われるが、
以下の指定をすると、改行が現れても終端がダブルクォートでないうちは、1レコードとして扱ってくれる。
continueif last !='"'

OPTION

実行時のパラメータをコマンドではなく制御ファイルに書ける

フィールドの指定

*** TRAILING NULLCOLS
相対位置に指定したカラムがデータ中に存在しない場合は、NULLがロードされる

TERMINATED

データの区切りを指定
  • TERMINATED BY ',' OPTIONARY ENCLOSED by '"'
カンマ区切りで項目を"で囲む

FILLER

データファイルのうち、データベースにロードされない項目を指定
       data1   column1,
       "DUMMY1" FILLER,
       "DUMMY2" FILLER
       ......

CONSTANT

定数を列にロードする
       column1 CONSTANT '0'

SYSDATE

列にSYSDATEをロードする
        column2 SYSDATE

文字データの文字数制限

CSVファイルをロードするときに、文字データが255バイトを超えるとエラーが発生してロードされない。
以下のように255バイトを超える項目にはchar(n)で最大文字列長を指定する。
(      hoge1,
       hoge2,
       hoge3,
       hoge4 char(1000) 
)