COL: CSS:



データロード (1)

SQL でのデータ管理データロード (1)データロード (2)整合性制約

SQL*Loader

SQL*Loader とは,Oracle Database 外に置かれた外部ファイルを,Oracle Database に反映するためのユーティリティである。

以下の 2 種類の外部ファイルを読み込み,Oracle データベースにロードする。

  • データファイル
  • 制御ファイル

外部ファイルを読み込み,データをロードした後出力されるファイルは以下の通り。

  • ログファイル
  • 不良ファイル
  • 廃棄ファイル

入力レコード形式

SQL*Loader では,データ・ファイルのデータをレコードとして解釈する。制御ファイルへレコード形式を指定する際は,INFILE パラメータを使用する。データ・ファイルの入力形式は以下の通り (デフォルトはストリーム・レコード形式)。

表1: データファイルの入力レコード形式
レコード形式柔軟度読速度詳細
固定レコード形式データ・ファイルのレコード・バイト長が全て同一。固定レコード形式の指定は簡単。
可変レコード形式データ・ファイルの各レコードの開始位置に,各レコード長を記載している。
ストリーム・レコード形式バイト長ではなく,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'
            :