SQL*Loader(sqlldrコマンド)使い方のまとめ

sqlloader制御ファイル書き方 データベース

SQL*LoaderはOracleが標準で提供したユーティリティです。
ファイルのデータをテーブルにロードできます。主に大量のデータを取り込むとき、使います。
SQL*Loaderを使うとき、制御ファイル(ctlファイル)を作成する必要です。

SQL*Loaderの実行コマンド

SQL*Loaderはsqlldrコマンドで実行します。
実行方法は複数が存在しますが、仕事中に主に以下の方法を使うため、
この方法のみを紹介します。

コマンド:
sqlldr パラメータ名=パラメータ値 [,パラメータ名=パラメータ値,…]

パラメータ一覧

パラメータ デフォルト 説明
CONTROL STRING SQL*Loader制御ファイル名
DATA STRING 拡張子が.datの制御ファイル名 ロードするデータファイル名
BAD STRING 拡張子が.badのデータ・ファイル名 SQL*Loaderによって作成される不良ファイル名
挿入中にエラーとなったレコード、または形式が不適切なレコードが出力される
※エラーレコードがなかった場合は不良ファイルは作成されない
LOG STRING 拡張子が.logの制御ファイル名 SQL*Loaderによって作成されるログファイル名

SQL*Loader制御ファイル

説明
LOAD DATA お約束の記述
CHARACTERSET データ・ファイルのキャラクタ・セット
INFILE INFILE ‘データ・ファイル名’ ["オプション”]
PRESERVE BLANKS CSVファイル内のカンマの前後の空白を除去しない(空白を残す)。
INTO TABLE [[ロード方法]NTO TABLE [[表名]td>
ロード方法は以下のいずれかを指定できる
APPEND:行追加、既存行がある場合は新しい行として追加
INSERT:空表に対するロード、空でない場合はエラー
REPLACE:行置換、既存行は全てDELETEしてからロード
TRUNCATE既存行をTRUNCATEしてからロード
WHEN WHEN (条件)
ロードするデータの条件を指定する
条件に一致しないデータは廃棄ファイルに出力される
条件を指定する必要がない場合は不要
TRAILING NULLCOLS 指定すると列が行中に存在しない場合、
その列の値はNULLとして処理される

項目(列)指定:(列名 [[オプション],[,列名 [オプション]])

項目名 FILLER この項目をロード対象外とする
項目名 CONSTANT ‘定数’ 指定した値でセットする
項目名 POSITION(開始バイト:終了バイト) 固定長データの場合の開始バイト、終了バイト
項目名 SEQUENCE(初期値, 増分値) 行追加ごとに 初期値+増分値でセットする
項目名 SEQUENCE(COUNT, 増分値) 行追加ごとに レコード数+増分値でセットする
項目名 SEQUENCE(MAX, 増分値) 行追加ごとに 項目最大値+増分値でセットする
項目名 SYSDATE システム日時をセットする
項目名 属性 項目の属性を指定
目名 “関数” Oracle関数を指定
属性 Oracleデータ型 説明
CHAR CHAR,VARCHAR2 文字列
DATE DATE 日付
DECIMAL EXTERNAL NUMBER 数値
ZONED NUMBER 小数有り数値

※CHARは255バイトを超える場合はCHAR(500)のようにバイト数を指定する必要。

ctl制御ファイルの使用例

ctlファイルにファイルの文字コードを指定する(ctlでSJISを指定する)
②ctlファイルにファイルの改行コードを指定する

LOAD DATA
CHARACTERSET JA16SJIS
INFILE * “str ‘\r\n'”
TRUNCATE
PRESERVE BLANKS
INTO TABLE テーブル名
FIELDS TERMINATED BY X’09’
TRAILING NULLCOLS
(
  aa CHAR(1000)
  ,bb “REPLACE(:bb,’,’,”)”
)
タイトルとURLをコピーしました