▲ ▼ データロード (1)
▲ SQL*Loader
SQL*Loader とは,Oracle Database 外に置かれた外部ファイルを,Oracle Database に反映するためのユーティリティである。
以下の 2 種類の外部ファイルを読み込み,Oracle データベースにロードする。
- データファイル
- 制御ファイル
外部ファイルを読み込み,データをロードした後出力されるファイルは以下の通り。
- ログファイル
- 不良ファイル
- 廃棄ファイル
▲ 入力レコード形式
SQL*Loader では,データ・ファイルのデータをレコードとして解釈する。制御ファイルへレコード形式を指定する際は,INFILE パラメータを使用する。データ・ファイルの入力形式は以下の通り (デフォルトはストリーム・レコード形式)。
レコード形式 | 柔軟度 | 読速度 | 詳細 |
固定レコード形式 | △ | ◎ | データ・ファイルのレコード・バイト長が全て同一。固定レコード形式の指定は簡単。 |
可変レコード形式 | ○ | ○ | データ・ファイルの各レコードの開始位置に,各レコード長を記載している。 |
ストリーム・レコード形式 | ◎ | △ | バイト長ではなく,SQL*Loader でレコード終了記号を認識を読み込むことでレコードを確認する。デフォルトはこの形式で読み込まれる。 |
△ 固定レコード形式
固定レコード形式では,データ・ファイル内の全てのレコード長を同じ長さで解釈する。指定方法は以下の通り。
/* ex1-1: 固定レコード形式の制御ファイル */ load data ← ロード開始の合図 infile 'hoge.dat' "fix 12" ← hoge.dat をロード (計 11 バイト (カンマ, 改行含む)) into table hoge ← ロードする表名は "hoge" fields terminated by ',' ← カンマ区切りで列判別 (col1, col2) ← ロード対象列
/* ex1-2: 固定レコード形式のデータ・ファイル (hoge.dat) */ 006, abc, 0002, fghi, 1, "pqrst", 0005, b ar, └← - 1件目: '006, abc, ' の計 12 バイト → col1 = '006' / col2 = ' abc' - 2件目: '0002, fghi,\n' の計 12 バイト (終端は改行) → col1 = '0002' / col2 = ' fghi' - 3件目: '1, "pqrst",\n' の計 12 バイト (終端は改行) → col1 = '1' / col2 = 'pqrst' :
△ 可変レコード形式
可変レコード形式では,データ・ファイルの各レコードの開始位置に,各レコード長を記載している。指定方法は以下の通り。
/* ex2-1: 可変レコード形式の制御ファイル */ load data infile 'hoge.dat' "var 3" ← 3 バイトに "レコード長" が記載 into table hoge fields terminated by ',' (col1 char(5), col2 char(7))
/* ex2-2: 可変レコード形式のデータ・ファイル (hoge.dat) */ 011abcde,fghi,010woods,gj, 014here,is saga, └← - 1件目: '011' バイト分の 'abcde,fghi,' → col1 = 'abcde' / col2 = 'fghi' - 2件目: '010' バイト分の 'woods,gj,\n' (終端は改行) → col1 = 'woods' / col2 = 'gj' - 3件目: '014' バイト分の 'here,is saga,\n' (終端は改行) → col1 = 'here' / col2 = 'is saga' :
△ ストリーム・レコード形式
ストリーム・レコード形式では,SQL*Loader でレコード終了記号を読み込むことによってレコードを認識する。
/* ex3-1: ストリーム・レコード形式の書式 */ INFILE datafile ["str terminator_string"] - datafile: データファイル名 - terminator_string: 一重 / 二重引用符で囲まれた文字列,または 16 進バイト文字列
/* ex3-2: ストリーム・レコード形式の制御ファイル */ load data infile 'hoge.dat' "str '|\n'" ← “|\n(改行)”をレコード終了記号に into table hoge fields terminated by ',' (col1 char(5), col2 char(7))
/* ex3-3: ストリーム・レコード形式のデータ・ファイル (hoge.dat) */ fooba,rhoge,| mike,davis,| └← - 1件目: レコード終了記号 ('|\n') 出現までの 'fooba,rhoge,' → col1 = 'fooba' / col2 = 'rhoge' - 2件目: 次レコード終了記号 ('|\n') 出現までの 'mike,davis,' → col1 = 'mike' / col2 = 'davis' :