SQL*Loader による CSV ファイルのインポート手順

862
NO IMAGE

SQL*Loader を使用して CSV ファイルをインポートした際の備忘録

Oracle 標準ツールの SQL*Loader を使用して CSV ファイルをインポートした際の設定内容を記載します。

下記はコマンドプロンプト上で実行する際のイメージです。
sqlldr は SQL*Loader の実行ファイルの sqlldr.exe になります。

sqlldr parfile="C:\temp\test.par" control="C:\temp\test.ctl" bad="C:\log\test.bad" data="C:\temp\dummy.csv" log="C:\log\test_load.log"

以降 sqlldr の引数について記載します。

parfile (パラメータ・ファイル)

パラメータを記載したファイルを下記のように指定します。

parfile="C:\temp\test.par"

ファイル内には下記のようにパラメータを記載します。

userid=ユーザ名/パスワード

※今回は userid のみを記載していますが後述する control なども記載できます。

control (制御ファイル)

データのロード方法を記述するSQL*Loader制御ファイルの名前を指定します。

control="C:\temp\test.ctl"

データのロード方法を下記のように記載します。

LOAD DATA
    TRUNCATE                 // 上書きする場合は TRUNCATE を指定し、データ追加の場合は APPEND を指定する
    INTO TABLE DUMMY_TABLE   // データをロードする表の名前
    FIELDS TERMINATED BY ',' // 項目の区切り文字
    TRAILING NULLCOLS        // 指定した列が存在しない場合、その列の値を NULL として処理する (エラーにしない)
(FIELD1, FIELD2, FIELD3, ...)

bad (不良ファイル)

SQL*Loaderによって作成される不良ファイルの名前を指定します。

bad="C:\log\test.bad"

実際に出力される内容としては、何らかのエラーによりデータファイルから DB に取り込めなかったデータになります。

data (データ・ファイル)

インポートするデータが入っているデータ・ファイルの名前を指定します。

data="C:\temp\dummy.csv"

log (ログ・ファイル)

SQL*Loaderによって作成されるログ・ファイルを指定します。

log="C:\log\test_load.log"

エラー対応

parfile や control の設定はあまり問題ありませんでしたが data (データ・ファイル) に記載した内容に誤って数値型のカラムに文字列を設定していたため bad ファイルの出力とlog ファイル内に下記のようなエラーが記載されていました。
bad ファイルに対象の行が出力され、ログファイル内で具体的なエラーの記載 (ORA-01722) があり対応しやすかったです。

bad の内容

"0001","test","20210907"
        ^^^^※

※インポート先のカラムが数値型だった

log の内容 (一部抜粋)

~略~
レコード1: 拒否されました。- 表DUMMY_TABLE,列QUANTITYでエラーが発生しました。
ORA-01722: 数値が無効です。

表DUMMY_TABLE:
  0行のロードに成功しました。
  1行はデータ・エラーのためロードされませんでした。
  0行はWHEN句のエラーのためロードされませんでした。
  0行はすべてのフィールドがNULLのためロードされませんでした。
~略~

参考にした URL

SQL*Loaderコマンドライン・リファレンス