この項では、LOBFILEの異なるフィールド型からデータをロードする例を示します。
例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 ...
注意:
例の左に付けた太字の数字は、次の注意事項と対応しています。
FILLERフィールドは、SQL*LoaderのCHAR
データ型を使用して読み込まれる、40バイトのデータ・フィールドにマップされています。ここでは、デフォルトのバイト長セマンティクスの使用を想定しています。文字長セマンティクスが使用された場合、フィールドは40文字データ・フィールドにマップされます
SQL*Loaderでは、FILLERフィールドext_fname
のLOBFILE名が使用されます。(CHAR
データ型を使用する) LOBFILEの最初のバイトからEOF文字までのデータがロードされます。既存のLOBFILEが指定されていない場合、RESUME
フィールドは空に初期化されます。
例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 ...
注意:
例の左に付けた太字の数字は、次の注意事項と対応しています。
このエントリでは、現行のロード・セッション中、最後にロードされたバイト位置に続けてロードを開始し、CHAR
データ型を使用して、jqresume.txt
LOBFILEから2000バイトのデータをロードするように指定しています。ここでは、デフォルトのバイト長セマンティクスの使用を想定しています。文字長セマンティクスが使用された場合、SQL*Loaderでは、最後にロードされた文字の直後の文字から順番に、2000文字のデータがロードされます。詳細は、「文字長セマンティクス」を参照してください。
例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>
注意:
例の左に付けた太字の数字は、次の注意事項と対応しています。
CHAR
の最大長に2000が指定されているため、SQL*Loaderで、フィールドの最大長を推測でき、メモリーの使用量を最適化できます。最大長を指定する場合、小さすぎる値は指定しないように注意してください。TERMINATED
BY
句は、LOBを終了する文字列を指定します。かわりに、ENCLOSED
BY
句も使用できます。ENCLOSED
BY
句を使用すると、LOBFILE内でのLOBの相対的な位置指定に関して、多少柔軟に対応できます(LOBFILE内のLOBには順序が不要)。
例11-21では、LOBFILEの各LOBの先頭でデータ長が定義されています。VARCHAR
、VARCHARC
または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
注意:
例の左に付けた太字の数字は、次の注意事項と対応しています。
VARCHARC(4,2000)
のエントリによって、LOBFILEのLOBがLength-Value Pair形式であり、最初の4バイトが長さを示すことをSQL*Loaderに指定します。この2000
という値は、フィールドの最大サイズが2000であることを示します。ここでは、デフォルトのバイト長セマンティクスの使用を想定しています。文字長セマンティクスが使用された場合、最初の4文字は文字単位の長さとして解釈されます。フィールドの最大サイズは2000文字です。詳細は、「文字長セマンティクス」を参照してください。
Johny
Quest
の前の0501
は、次の501文字がLOBのデータであることを示します。
このエントリは、LOBが空である(NULLではない)ことを示します。