SQL*Loader を使ってみる

SQL*Loader とは、Oracle DB 付属のツールで、CSV ファイルなどに書かれたデータを一気に INSERT できるツールだ。コントロールファイルと呼ばれる設定ファイルの書き方に特徴があったり、設定値未指定の場合の初期値に難があったりするので、参考となる情報をまとめておく。

SQL*Loader の使い方

SQL*Loader は以下のように 、コマンドプロンプトなどからSqlldr コマンドで実行する。

Sqlldr userid=scott/tiger control=sample.ctl

control オプションに書いたファイルが、設定項目を持つ「コントロールファイル」となる。

Sqlldr コマンドのみを打つと、このコマンドで使えるパラメータやデフォルト値が確認できる。

コントロールファイルのサンプル

以下をテンプレート代わりにしてもらえると良いかと。仮に sample.ctl としておく。

OPTIONS (
  LOAD = -1,
  SKIP = 0,
  ERRORS = 0,
  ROWS = -1,
  DIRECT = TRUE,
  MULTITHREADING = TRUE,
  PARALLEL = TRUE
)
LOAD DATA
  CHARACTERSET UTF8
  INFILE 'sample.csv'
  BADFILE 'sample.bad'
  APPEND
    
    INTO sample_table
    FIELDS TERMINATED BY ","
    TRAILING NULLCOLS
  (
    column_A,
    column_B "TO_DATE(:column_B, 'YYYY/MM/DD HH24:MI:SS')",
    column_C DATE 'YYYY/MM/DD HH24:MI:SS',
    column_D DECIMAL EXTERNAL(10),
    column_E ZONED(5, 2),
    column_F CHAR(100),
    column_G CONSTANT "Text",
    column_H SYSDATE
    column_I NULLIF column_E=BLANKS,
    column_J TERMINATED BY ';',
    column_K
  )

コントロールファイル内でのコメントは「--」で可能。

OPTIONS について

LOAD DATA について

カラム指定について

データファイルは?

通常は CSV ファイルとして、1行が1レコードのファイルを用意しておけば良い。コントロールファイルで定義したカラムに、カンマごとにデータが入っていく。

改行を含んだ CSV ファイルが上手く取り込めるかは知らない (試したことがない)。

参考