プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
12cリリース1 (12.1.0.2)
B71303-09
目次へ移動
目次
索引へ移動
索引

前
次

LOBFILEからのLOBデータのロードの例

この項では、LOBFILEの異なるフィールド型からデータをロードする例を示します。

ファイル当たり1つのLOB

例11-18では、各LOBFILEは、それぞれ1つのLOBのソースです。この方法で編成されたLOBデータをロードするには、列名またはフィールド名の後にLOBFILEデータ型を指定します。

例11-18 LOBFILE当たり1つのLOBを使用したLOBデータのロード

制御ファイルの内容

LOAD DATA 
INFILE 'sample.dat'
   INTO TABLE person_table
   FIELDS TERMINATED BY ','
   (name      CHAR(20),
1  ext_fname    FILLER CHAR(40),
2  "RESUME"     LOBFILE(ext_fname) TERMINATED BY EOF)

データ・ファイル(sample.dat)

Johny Quest,jqresume.txt,
Speed Racer,'/private/sracer/srresume.txt',

セカンダリ・データ・ファイル(jqresume.txt)

             Johny Quest
         500 Oracle Parkway
            ...

セカンダリ・データ・ファイル(srresume.txt)

         Speed Racer
     400 Oracle Parkway
        ...

注意:

例の左に付けた太字の数字は、次の注意事項と対応しています。

  1. FILLERフィールドは、SQL*LoaderのCHARデータ型を使用して読み込まれる、40バイトのデータ・フィールドにマップされています。ここでは、デフォルトのバイト長セマンティクスの使用を想定しています。文字長セマンティクスが使用された場合、フィールドは40文字データ・フィールドにマップされます

  2. SQL*Loaderでは、FILLERフィールドext_fnameのLOBFILE名が使用されます。(CHARデータ型を使用する) LOBFILEの最初のバイトからEOF文字までのデータがロードされます。既存のLOBFILEが指定されていない場合、RESUMEフィールドは空に初期化されます。

事前に決められたサイズのLOB

例11-19では、制御ファイルの特定の列にロードするLOBのサイズを指定します。ロード時、列にロードしたLOBデータは、指定したサイズとみなされます。事前に決められたサイズのフィールドでは、データ解析機能を最適に実行できます。ただし、すべてのLOBデータが必ずしも同じサイズであるとはかぎりません。

例11-19 事前に決められたサイズのLOBを使用したLOBデータのロード

制御ファイルの内容

LOAD DATA 
INFILE 'sample.dat'
INTO TABLE person_table
FIELDS TERMINATED BY ','
   (name     CHAR(20),
1  "RESUME"    LOBFILE(CONSTANT '/usr/private/jquest/jqresume.txt')
               CHAR(2000))

データ・ファイル(sample.dat)

Johny Quest,
Speed Racer,

セカンダリ・データ・ファイル(jqresume.txt)

             Johny Quest
         500 Oracle Parkway
            ...
             Speed Racer
         400 Oracle Parkway
            ...

注意:

例の左に付けた太字の数字は、次の注意事項と対応しています。

  1. このエントリでは、現行のロード・セッション中、最後にロードされたバイト位置に続けてロードを開始し、CHARデータ型を使用して、jqresume.txt LOBFILEから2000バイトのデータをロードするように指定しています。ここでは、デフォルトのバイト長セマンティクスの使用を想定しています。文字長セマンティクスが使用された場合、SQL*Loaderでは、最後にロードされた文字の直後の文字から順番に、2000文字のデータがロードされます。詳細は、「文字長セマンティクス」を参照してください。

デリミタ付きフィールドのLOB

例11-20では、LOBFILEがデリミタ付きフィールドである場合の、LOBデータの例を示します。この形式では、サイズの異なるLOBを同じ列にロードしても、問題は発生しません。ただし、このような柔軟性によって、SQL*Loaderで区切り文字列を探してデータをスキャンする必要があるため、パフォーマンスに影響します。

例11-20 デリミタ付きLOBを使用したLOBデータのロード

制御ファイルの内容

LOAD DATA 
INFILE 'sample.dat'
INTO TABLE person_table
FIELDS TERMINATED BY ','
   (name     CHAR(20),
1  "RESUME"    LOBFILE( CONSTANT 'jqresume') CHAR(2000) 
               TERMINATED BY "<endlob>\n")

データ・ファイル(sample.dat)

Johny Quest,
Speed Racer,

セカンダリ・データ・ファイル(jqresume.txt)

             Johny Quest
         500 Oracle Parkway
            ... <endlob>
             Speed Racer
         400 Oracle Parkway
            ... <endlob>

注意:

例の左に付けた太字の数字は、次の注意事項と対応しています。

  1. CHARの最大長に2000が指定されているため、SQL*Loaderで、フィールドの最大長を推測でき、メモリーの使用量を最適化できます。最大長を指定する場合、小さすぎる値は指定しないように注意してください。TERMINATED BY句は、LOBを終了する文字列を指定します。かわりに、ENCLOSED BY句も使用できます。ENCLOSED BY句を使用すると、LOBFILE内でのLOBの相対的な位置指定に関して、多少柔軟に対応できます(LOBFILE内のLOBには順序が不要)。

Length-Value Pairで指定したLOB

例11-21では、LOBFILEの各LOBの先頭でデータ長が定義されています。VARCHARVARCHARCまたはVARRAWデータ型を使用して、この方法で編成されたLOBデータをロードできます。

このロード方法を使用すると、デリミタ付きフィールドを使用するより高いパフォーマンスを得ることができます。ただし、柔軟性は損なわれます(たとえば、各LOBのロード前に、LOBの長さの確認が必要です)。

例11-21 Length-Value Pairを指定したLOBを使用したLOBデータのロード

制御ファイルの内容

LOAD DATA 
INFILE 'sample.dat'
INTO TABLE person_table
FIELDS TERMINATED BY ','
   (name          CHAR(20),
1  "RESUME"       LOBFILE(CONSTANT 'jqresume') VARCHARC(4,2000))

データ・ファイル(sample.dat)

Johny Quest,
Speed Racer,

セカンダリ・データ・ファイル(jqresume.txt)

2      0501Johny Quest
       500 Oracle Parkway
          ... 
3      0000	

注意:

例の左に付けた太字の数字は、次の注意事項と対応しています。

  1. VARCHARC(4,2000)のエントリによって、LOBFILEのLOBがLength-Value Pair形式であり、最初の4バイトが長さを示すことをSQL*Loaderに指定します。この2000という値は、フィールドの最大サイズが2000であることを示します。ここでは、デフォルトのバイト長セマンティクスの使用を想定しています。文字長セマンティクスが使用された場合、最初の4文字は文字単位の長さとして解釈されます。フィールドの最大サイズは2000文字です。詳細は、「文字長セマンティクス」を参照してください。

  2. Johny Questの前の0501は、次の501文字がLOBのデータであることを示します。

  3. このエントリは、LOBが空である(NULLではない)ことを示します。