SQL*Loaderで固定長ファイルからデータを取り込むサンプルです。
前提
以下の固定長ファイルから、以下のテーブルにロードします。
- (部品マスタ.txt)
- 部品コード,商品名,単価,在庫数,適用日 1001ねじ 00580020002021/01/01 1002くぎ 00350150002021/01/02 1003ナット 01020007002021/01/03
列名 | 型 |
---|---|
CD | CHAR(4) |
NAME | VARCHAR2(10) |
PRICE | NUMBER(5,2) |
STOCK | NUMBER(5,0) |
TEKIYO | DATE |
サンプル
制御ファイル(ctlファイル)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
OPTIONS (SKIP=1) --1行目は取り込まない(タイトル行のため) LOAD DATA CHARACTERSET JA16SJIS --文字コードはSJIS INFILE 'C:¥部品マスタ.txt' --取り込みファイル BADFILE 'C:¥部品マスタ.bad' --batファイル TRUNCATE --テーブルをTRUNCATEしてから取り込む INTO TABLE 部品マスタ --テーブル名 TRAILING NULLCOLS --データなしの場合はNULLにする ( --テーブルの列 CD POSITION(1:4) CHAR, --1~4桁目を文字型として取り込む NAME POSITION(5:14) CHAR, --5~14桁目を文字型として取り込む PRICE POSITION(15:19) ZONED(5,2), --15~19桁目を小数値(5,2)として取り込む STOCK POSITION(20:24) DECIMAL EXTERNAL, --20~24桁目を数値として取り込む TEKIYO POSITION(25:34) DATE --25~34桁目を日付型として取り込む ) |
POSITIONで開始位置と終了位置を指定して、型を指定します。
SQL*Loaderの型はテーブルの型とは異なり、以下の型を指定します。
型 | DBの型 | SQL*Loaderの型 | 備考 |
---|---|---|---|
文字型 | CHAR、VARCHAR2 | CHAR | CHARとVARCHAR2の区別はしません。 |
整数値型 | NUMBER(m,0) | DECIMAL EXTERNAL | 桁数の指定はしません。 |
小数値型 | NUMBER(m,n) | ZONED(m,n) | ZONEDの引数に桁数の指定をします。 |
日付型 | DATE | DATE |
実行コマンド例
- 実行例
- C:¥>sqlldr usr01/usr01@db01 control=c:¥buhin.ctl log=c:¥部品マスタ.log
ID:user01、パスワード:user01、接続文字列:db01 の例です。
実行結果
CD | NAME | PRICE | STOCK | TEKIYO |
---|---|---|---|---|
1001 | ねじ | 5.80 | 2000 | 2021/01/01 |
1002 | くぎ | 3.50 | 15000 | 2021/01/02 |
1003 | ナット | 10.20 | 700 | 2021/01/03 |
解説
- POSITIONに指定する数値はバイト数です。
- 実行時のログは「部品マスタ.log」に出力されます。
- 取り込みに失敗した場合は「部品マスタ.bat」ファイルに対象データが書き出されます。