SQL*LoaderはOracleが標準で提供したユーティリティです。
ファイルのデータをテーブルにロードできます。主に大量のデータを取り込むとき、使います。
SQL*Loaderを使うとき、制御ファイル(ctlファイル)を作成する必要です。
SQL*Loaderの実行コマンド
SQL*Loaderはsqlldrコマンドで実行します。
実行方法は複数が存在しますが、仕事中に主に以下の方法を使うため、
この方法のみを紹介します。
コマンド:
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,’,’,”)”
)
CHARACTERSET JA16SJIS
INFILE * “str ‘\r\n'”
TRUNCATE
PRESERVE BLANKS
INTO TABLE テーブル名
FIELDS TERMINATED BY X’09’
TRAILING NULLCOLS
(
aa CHAR(1000)
,bb “REPLACE(:bb,’,’,”)”
)