15 ORACLE_LOADERアクセス・ドライバ
ORACLE_LOADERアクセス・ドライバのパラメータを使用して外部表にアクセスする方法を制御し、アクセス・ドライバのデフォルト動作を変更する方法を学習します。
- ORACLE_LOADERアクセス・ドライバについて
ORACLE_LOADER
アクセス・ドライバは、ORACLE_LOADER
型の外部表に固有のアクセス・パラメータのセットを提供します。 - access_parameters句
access_parameters
句には、コメント、レコード形式およびフィールド形式の情報が含まれています。 - record_format_info句
record_format_info
句とその副次句を使用して、レコード情報を解析、ラベル付け、管理する方法について説明します。 - field_definitions句
field_definitions
句では、FIELDS
パラメータを使用してデータ・ファイルのフィールドに名前を付け、レコード内でのそれらの検索方法を指定します。 - column_transforms句
オプションのORACLE_LOADER
アクセス・ドライバCOLUMN TRANSFORMS
句を使用した変換では、データ・ファイル内の列に直接マップされない外部表内の列をロードする方法を指定できます。 - ORACLE_LOADERアクセス・ドライバのパラレル・ロードに関する考慮点
ORACLE_LOADER
アクセス・ドライバは、大きいデータ・ファイルを、個別に処理できるチャンクに分割しようとします。 - ORACLE_LOADERアクセス・ドライバを使用する際のパフォーマンスのヒント
このトピックでは、ORACLE_LOADER
アクセス・ドライバを使用する際のパフォーマンスのヒントについて説明します。 - ORACLE_LOADERアクセス・ドライバ使用時の制限事項
この項では、ORACLE_LOADER
アクセス・ドライバを使用する際に知っておく必要がある制限事項について説明します。 - ORACLE_LOADERアクセス・ドライバの予約語
外部表アクセス・パラメータで、列名や表名などの識別子が指定された場合、特定の値はアクセス・パラメータ・パーサーにより予約語とみなされます。
親トピック: 外部表
15.1 ORACLE_LOADERアクセス・ドライバについて
ORACLE_LOADER
アクセス・ドライバは、ORACLE_LOADER
型の外部表に固有のアクセス・パラメータのセットを提供します。
アクセス・ドライバのデフォルトの動作を変更するためにアクセス・パラメータを使用できます。アクセス・ドライバで指定する情報により、データ・ソースのデータが、外部表の定義と一致するように処理されます。
ORACLE_LOADERアクセス・パラメータが提供する外部テーブル管理機能を使用するには、使用するプラットフォームのデータ・ファイルのファイル形式とレコード形式(文字セット、フィールドのデータ型など)についての知識が必要です。また、外部表を作成し、その外部表に問合せを実行するためのSQLの知識も必要です。
SQL*LoaderでEXTERNAL_TABLE=GENERATE_ONLY
パラメータを使用すると、任意のSQL*Loader制御ファイルに適正なアクセス・パラメータを取得できます。GENERATE_ONLY
を指定すると、制御ファイルに記述されているとおり、SQL*Loaderログ・ファイル内の外部表を使用してロードを行うために必要なすべてのSQL文が書き込まれます。それらのSQL文は編集およびカスタマイズできます。それらの文をSQL*Plusで実行すると、SQL*Loaderを使用せずに実際のロードを後から実行できます。
ノート:
-
ORACLE_LOADER
アクセス・ドライバのパラメータ構文は、別のORACLE_LOADER
アクセス・ドライバのパラメータを参考にしないと理解することが困難になることがあります。特定のパラメータの構文が理解しにくいときには、そのパラメータを別の参考パラメータと関連付けて参照してください。 -
CREATE TABLE...ORGANIZATION EXTERNAL
文について示すORACLE_LOADERアクセス・ドライバのパラメータ例では、その後に外部表用のデータ・ファイルのコンテンツの例が続いていますが、その例のデータ・ファイルのコンテンツはCREATE TABLE
文の一部分ではない点に注意してください。それらは、例が完全なものになるようにするために例中にのみ存在するものです。 -
外部表アクセス・パラメータにおいて列名や表名などの識別子が指定される場合、特定の値はアクセス・パラメータ・パーサーによって予約語とみなされます。予約語を識別子として使用するには、二重引用符で囲む必要があります。
15.2 access_parameters句
access_parameters
句には、コメント、レコード形式およびフィールド形式の情報が含まれています。
デフォルト
ありません。
用途
データ・ソースのデータの記述は外部表の定義とは別です。これは、次のことを意味します。
- ソース・ファイルに含まれるフィールドの数は、外部表の列数と異なる場合があります。
- データ・ソースのフィールドのデータ型は、外部表の列のデータ型と異なる場合があります。
アクセス・ドライバによって、データ・ソースのデータが、外部表の定義と一致するように処理されます。
ノート:
これらのアクセス・パラメータは、SQL文のCREATE TABLE...ORGANIZATION EXTERNAL
のopaque_format_spec
としてまとめて参照されます。
関連項目:
SQL CREATE TABLE...ORGANIZATION EXTERNAL
文を使用するときにopaque_format_spec
を指定する方法の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
コメント
コメントは、2つのハイフンで始まり、その後にテキストが続く行です。コメントは、アクセス・パラメータより前に位置する必要があります。たとえば:
--This is a comment. --This is another comment. RECORDS DELIMITED BY NEWLINE
二重ハイフンの右側のすべてのテキストは行末まで無視されます。
record_format_info
record_format_info
句はオプションであり、レコード(形式など)、データの文字セット、およびレコードをロードの対象外とする規則についての情報が含まれます。構文の詳細は、「record_format_info句」を参照してください。
field_definitions
field_definitions
句を使用して、データ・ファイルのフィールドを指定します。データ・ファイルのフィールドが外部表の列と同じ名前の場合、フィールドのデータはその列に使用されます。構文の詳細は、「field_definitions句」を参照してください。
column_transforms
column_transforms
句はオプションであり、データ・ファイルの列に直接マップされない外部表の列のロード方法を記述するために使用します。NULL
、CONSTANT
、CONCAT
およびLOBFILE
変換を使用して行います。構文の詳細は、「column_transforms句」を参照してください。
親トピック: ORACLE_LOADERアクセス・ドライバ
15.3 record_format_info句
record_format_info
句とその副次句を使用して、レコード情報を解析、ラベル付け、管理する方法を学習します。
- record_format_info句の概要
record_format_info
句には、レコード(形式など)、データの文字セットおよびレコードをロード対象外とする規則についての情報が含まれます。 - FIXED長
record_format_info
FIXED
句は、外部ファイルのすべてのレコードを固定のバイト長サイズとして識別するために使用します。 - VARIABLEサイズ
record_format_info VARIABLE
句は、レコードが可変長であること示すために使用します - DELIMITED BY
record_format_info
DELIMITED BY
句は、レコード終了文字を区切りにするために使用します。 - XMLTAG
record_format_info
XMLTAG
句は、XMLドキュメントからサブドキュメントをロードするために使用するXMLタグの指定に使用します。 - CHARACTERSET
record_format_info
CHARACTERSET
句は、データ・ファイルの文字セットを指定するために使用します。 - EXTERNAL VARIABLE DATA
ORACLE_DATAPUMP
アクセス・ドライバで生成されたダンプ・ファイルをOracle SQL Connector for HDFSにロードするには、EXTERNAL VARIABLE DATA
句を使用します。 - PREPROCESSOR
すべてのデータ・ファイルに対して実行する独自のプリプロセッサ・プログラムを指定するには、record_format_info
PREPROCESSOR
句を使用します。 - LANGUAGE
LANGUAGE
句を使用すると、言語名(FRENCH
など)を指定できます。この言語名から、データのロケールに依存する情報が得られます。 - TERRITORY
TERRITORY
句を使用すると、入力データの特性をより詳細に判断するための地域名を指定できます。 - DATA IS...ENDIAN
DATA IS...ENDIAN
句を使用して、データ・ファイルを生成したプラットフォームによってバイト順序が異なるデータのエンディアンを指定します。 - BYTEORDERMARK [CHECK | NOCHECK]
record_format_info
BYTEORDERMARK
句を使用すると、データ・ファイルのバイト順序マーク(BOM)の有無をチェックするかどうかを指定できます。 - STRING SIZES ARE IN
record_format_info
STRING SIZES ARE IN
句を使用すると、文字列に指定された長さがバイト単位か文字単位かを指定できます。 - LOAD WHEN
record_format_info
LOAD WHEN
句を使用すると、データベースに渡すレコードを識別できます。 - BADFILE | NOBADFILE
record_format_info
BADFILE
句を使用すると、エラーのためにレコードをロードできない場合にレコードが書き込まれるファイルの名前を指定できます。 - DISCARDFILE | NODISCARDFILE
record_format_info
DISCARDFILE
句を使用すると、LOAD WHEN
句の条件を満たさないレコードが書き込まれるファイルの名前を指定できます。 - LOGFILE | NOLOGFILE
record_format_info
LOGFILE
句を使用すると、データ・ファイル内のデータへのアクセス中に外部表ユーティリティによって生成されたメッセージを含むファイルに名前を付けることができます。 - SKIP
record_format_info
SKIP
句を使用すると、ロードする前にデータファイル内の指定した数のレコードをスキップできます。 - FIELD NAMES
record_format_info
FIELD NAMES
句を使用して、データファイル内のフィールド順序を指定します。 - READSIZE
READSIZE
パラメータでは、レコードの処理に使用する読取りバッファのサイズを指定します。 - DISABLE_DIRECTORY_LINK_CHECK
DISABLE_DIRECTORY_LINK_CHECK
パラメータは、ORACLE_LOADER
アクセス・ドライバにシンボリック・リンク・チェックをバイパスするように指示します。 - DATE_CACHE
- 文字列
文字列は、引用符で囲まれた一連の文字または16進数字です。 - condition_spec
condition_spec
では、ブール演算子で結合される1つ以上の条件を指定します。 - [directory object name:] [filename]
[directory object name:] [filename]
句を使用して、出力ファイルの名前(BADFILE
、DISCARDFILE
またはLOGFILE
)を指定します。 - condition
- IO_OPTIONS句
- DNFS_DISABLE | DNFS_ENABLE
- DNFS_READBUFFERS
record_format_info
句のDNFS_READBUFFERS
パラメータを使用して、Direct NFSクライアントによって使用される読取りバッファの数を制御します。
親トピック: ORACLE_LOADERアクセス・ドライバ
15.3.1 record_format_info句の概要
record_format_info
句には、レコード(形式など)、データの文字セットおよびレコードをロード対象とする規則についての情報が含まれます。
PREPROCESSOR
句を使用すると、ユーザーが用意したプログラムの名前を指定し、そのプログラムを実行して、ORACLE_LOADER
アクセス・ドライバで解析できるようにデータ・ファイルの内容を変更できます。
record_format_info
句はオプションです。record_format_info
句の構文は次のとおりです。
et_record_spec_options
句を使用すると、追加の書式情報をオプションで指定できます。書式オプションは必要な数だけ任意の順序で指定できます。オプションの構文は次のとおりです。
次のet_output_files
の図に、不良ファイル、廃棄ファイルおよびログ・ファイルを指定するオプションを示します。これらの句ごとに、ディレクトリ・オブジェクト名またはファイル名(あるいはその両方)を指定する必要があります。
親トピック: record_format_info句
15.3.2 FIXED長
record_format_info
FIXED
句は、外部ファイルのすべてのレコードを固定のバイト長サイズとして識別するために使用します。
デフォルト
ありません。
用途
外部表のすべてのレコードを固定のバイト長サイズとして識別できます。
使用上のノート
FIXED
レコードに対して指定したサイズには、改行などのレコード終了文字を含める必要があります。他のレコード型と比較して、固定長レコードの固定長フィールドは、アクセス・ドライバを最も簡単に処理できるフィールドおよびレコード形式です。
例
次に、FIXED
レコードが使用されている例を示します。この例では、データ・ファイルの各レコードの末尾に1バイトの改行文字があるとします。FIXED
を使用したcreate tableコマンドの後に、その表にロードできるデータ・ファイルの例を示しています。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (RECORDS FIXED 20 FIELDS (first_name CHAR(7),
last_name CHAR(8),
year_of_birth CHAR(4)))
LOCATION ('info.dat'));
Alvin Tolliver1976
KennethBaer 1963
Mary Dube 1973
親トピック: record_format_info句
15.3.3 VARIABLEサイズ
record_format_info VARIABLE
句は、レコードが可変長であること示すために使用します
デフォルト
ありません。
用途
VARIABLE
句を使用して、レコードを可変長として識別します。各レコードの先頭に、レコードのバイト数を示す文字列が付きます。カウント・フィールドを含む文字列の長さは、VARIABLE
パラメータの後に続くサイズ引数となります。サイズは、文字数ではなく、バイト数で表されることに注意してください。レコードの先頭の数値にレコード終了文字の分が含まれる必要があります。ただし、カウント・フィールド自身のサイズは含まれません。レコード終了文字のバイト数は、ファイルの作成方法および作成時のプラットフォームによって異なります。
例
次のVARIABLE
レコードの使用例では、データ・ファイルの各レコードの末尾に1バイトの改行文字があります。SQL例の後に、ロードに使用できるデータ・ファイルの例を示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (RECORDS VARIABLE 2 FIELDS TERMINATED BY ','
(first_name CHAR(7),
last_name CHAR(8),
year_of_birth CHAR(4)))
LOCATION ('info.dat'));
21Alvin,Tolliver,1976,
19Kenneth,Baer,1963,
16Mary,Dube,1973,
親トピック: record_format_info句
15.3.4 DELIMITED BY
record_format_info
DELIMITED BY
句は、レコード終了文字を区切りにするために使用します。
デフォルト
なし
用途
DELIMITED BY
句を使用して、レコードの終わりを識別する文字を指定します。
DELIMITED BY NEWLINE
を指定したときに、実際に使用される値はプラットフォームに依存します。UnixまたはLinuxのオペレーティング・システムでは、NEWLINE
は\n
とみなされます。Microsoft Windowsオペレーティング・システムでは、NEWLINE
は\r\n
とみなされます。
データ・ファイルの作成時に使用されたレコード・デリミタがわからないときに、DELIMITED BY NEWLINE
を指定した外部表問合せを実行すると、ファイルが不正確にロードされることがあります。この問合せは、データ・ファイルの作成時に使用されたレコード・デリミタを特定することなく実行できます。たとえば、UnixまたはLinuxのオペレーティング・システムで作業するときに、Windows形式で作成されたファイルを使用することもあります。UNIXまたはLinuxのオペレーティング・システムでRECORDS DELIMITED BY NEWLINE
を指定すると、デリミタは自動的に\n
とみなされます。ただし、ファイルはWindows形式で作成され、レコードが\r\n
で区切られているため、このファイルはUNIXまたはLinuxのオペレーティング・システムに正しくアップロードされません。
異なるレコード・デリミタの問題を解決するには、次の構文を使用します。
RECORDS DELIMITED BY DETECTED NEWLINE
この構文により、ORACLE_LOADER
アクセス・ドライバはデータをスキャンして最初にWindowsのデリミタ('\r\n
')を探します。Windowsのデリミタが見つからなかった場合、アクセス・ドライバはUnixまたはLinuxのデリミタ('\n
')を探します。見つかった最初のデリミタは、レコード・デリミタとして使用されます。
レコード・デリミタが見つかると、そのデリミタはアクセス・ドライバによってレコードの末尾として識別されます。このため、レコードの末尾より前のデータに埋込みデリミタ文字が含まれていると、DETECTED
キーワードが使用できなくなります。これは、ORACLE_LOADER
アクセス・ドライバが、フィールド内のデリミタをレコードの末尾を示しているものと誤って想定するためです。結果として、ファイル内の現行のレコードと後続のレコードが正しく解析されなくなります。
同じファイル内に改行デリミタを混在させることはできません。ORACLE_LOADER
が最初のデリミタを見つけると、それがファイル内のレコードを識別するデリミタになります。アクセス・ドライバは、同じ改行文字をデリミタとして使用して、ファイル内の後続のすべてのレコードを処理します。
DELIMITED BY string
を指定する場合、string
はテキストにするか、引用符で囲んだOX
またはX
で始まる一連の16進数にします。文字列がテキストの場合は、データ・ファイルの文字セットに変換され、その結果がレコードの境界の識別に使用されます。
次の条件を満たす場合は、デリミタの識別には16進数字を使用する必要があります。
- アクセス・パラメータの文字セットがデータ・ファイルの文字セットとは異なる場合。
- 区切り文字列中にデータ・ファイルの文字セットに変換できない文字がある場合。
16進数字はバイトに変換されます。16進文字列では文字セットの変換は実行されません。
ファイルの終わりがレコード終了記号の前で検出された場合、アクセス・ドライバは、終了記号が検出された場合と同様に、ファイルの終わりまでの処理されていないすべてのデータをレコードの部分とみなします。
ノート:
デリミタ付きのレコードには、VARCHAR
およびVARRAW
のバイナリ数値を含むバイナリ・データを含めないでください。バイナリ・データを含めると、そのバイナリ・データがデリミタの検索中に文字として解釈されるため、エラーまたは破損が発生します。
例
次に、DELIMITED BY
レコードの使用例を示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (RECORDS DELIMITED BY '|' FIELDS TERMINATED BY ','
(first_name CHAR(7),
last_name CHAR(8),
year_of_birth CHAR(4)))
LOCATION ('info.dat'));
Alvin,Tolliver,1976|Kenneth,Baer,1963|Mary,Dube,1973
関連トピック
親トピック: record_format_info句
15.3.5 XMLTAG
record_format_info
XMLTAG
句は、XMLドキュメントからサブドキュメントをロードするために使用するXMLタグの指定に使用します。
デフォルト
なし
用途
ORACLE_LOADER
アクセス・ドライバのXMLTAG
句を使用して、XMLドキュメントからのサブドキュメントのロードに使用するXMLタグを指定できます。アクセス・ドライバは、句で識別するタグで囲まれたドキュメントのデータ・ファイルを検索し、それらのドキュメントを個別の行として外部表にロードします。
XMLTAG
句は、1つ以上の文字列のリストを受け入れます。これらの文字列を使用して、ORACLE_LOADER
がデータ・ファイル内のサブドキュメントを検索するときに使用するタグが作成されます。アクセス・パラメータで指定するタグには、"<
"および">
"デリミタは含めません。
ORACLE_LOADER
アクセス・ドライバは、ファイルの先頭からXMLTAG
句にリストされたタグが最初に出現する箇所検索します。一致が見つかると、対応する閉じタグを検索します。たとえば、タグが"ORDER_ITEM
"の場合、ORACLE_LOADER
は、ファイルの先頭からテキスト文字列"<ORDER_ITEM>"
を検索します。"<ORDER_ITEM>
"が出現する箇所が見つかると、次に、"</ORDER_ITEM>
"を検索します。タグ<ORDER_ITEM>と</ORDER_ITEM>の間のすべての内容が、ドキュメントから行にロードされる部分となります。その後、ORACLE_LOADER
は、閉じタグの後の最初の文字から、次に出現するタグを検索します。
ORACLE_LOADER
アクセス・ドライバは、タグ名と一致する要素に対してXMLドキュメントを解析するのではなく、単に、テキスト・ファイル全体の文字列検索を実行します。外部表がパラレルにアクセスされている場合、ORACLE_LOADER
は、各セクションが独立して読み取られるように、大きいファイルを分割します。データ・ファイルのセクションの読取りを開始するとき、XMLTAG
で指定されたタグの1つの検索を開始します。セクションの終わりに到達したが、まだ一致する終了タグを検索している場合、ORACLE_LOADER
は、一致する終了タグが見つかるまで引き続き次のセクションを読み取ります。
XMLTAGの使用時の制限事項
-
要素が同じ要素のドキュメントの内側にネストされているデータ・ファイルは、
XMLTAG
句を使用してロードすることはできません。たとえば、XMLTAG(‘FOO’)
を使用してロードするデータ・ファイルに次のデータが含まれているとします。<FOO><BAR><FOO></FOO></BAR></FOO>
この場合、
ORACLE_LOADER
では最初の<FOO>
と最初の</FOO>
の間にあるすべての内容をドキュメントとして抽出しますが、これは有効なドキュメントを構成していません。同様に、
XMLTAG(“FOO”,”BAR”)
を指定した場合、データ・ファイルに次のデータが含まれているとします。<FOO><BAR></BAR></FOO>
この場合は、
<BAR>
と</BAR>
がロードされますが、"FOO
"のドキュメントとしてロードされます。 -
抽出されるサブドキュメントの大きさの制限は、
READSIZE
アクセス・パラメータによって決定されます。ORACLE_LOADER
アクセス・ドライバがREADSIZE
よりも大きいサブドキュメントを検出した場合、エラーが返されます。
XMLTAG句の使用例
たとえば、次のようにして外部表T_XT
を作成するとします。
CREATE TABLE "T_XT"
(
"C0" VARCHAR2(2000)
)
ORGANIZATION external
(
TYPE oracle_loader
DEFAULT DIRECTORY DMPDIR
ACCESS PARAMETERS
(
RECORDS
XMLTAG ("home address", "work address"," home phone ")
READSIZE 1024
SKIP 0
FIELDS NOTRIM
MISSING FIELD VALUES ARE NULL
(
"C0" (1:2000) CHAR(2000)
)
)
location
(
't.dat'
)
)REJECT LIMIT UNLIMITED
/
exit;
データ・ファイルの内容が次のとおりだとします。
<first name>Lionel</first name><home address>23 Oak St, Tripoli, CT</home address><last name>Rice</last name>
この場合、次のSQL問合せを実行できます。
SQL> SELECT C0 FROM T_XT;
C0
------------------------------------------------------------------
<home address>23 Oak St, Tripoli, CT</home address>
親トピック: record_format_info句
15.3.6 CHARACTERSET
record_format_info
CHARACTERSET
句は、データ・ファイルの文字セットを指定するために使用します。
デフォルト
ありません。
用途
CHARACTERSET string
句を使用して、データ・ファイルの文字セットを識別します。文字セットを指定しない場合、データベースのデフォルトの文字セットが使用されます。
ノート:
クライアントのNLS環境変数設定は、データベースに使用される文字セットに影響しません。
親トピック: record_format_info句
15.3.7 EXTERNAL VARIABLE DATA
ORACLE_DATAPUMP
アクセス・ドライバで生成されたダンプ・ファイルをOracle SQL Connector for HDFSにロードするには、EXTERNAL VARIABLE DATA
句を使用します。
デフォルト
ありません。
用途
EXTERNAL VARIABLE DATA
句を指定し、ORACLE_LOADER
アクセス・ドライバを使用してORACLE_DATAPUMP
アクセス・ドライバで生成されたダンプ・ファイルをロードします。
ノート:
EXTERNAL VARIABLE DATA
句がOracle SQL Connector for Hadoop Distributed File System (HDFS)とともに使用する場合にのみ、有効です。Oracle SQL Connector for HDFSの詳細は、『Oracle Big Data Connectorsユーザーズ・ガイド』を参照してください。
構文および説明
EXTERNAL VARIABLE DATA
句には、次のアクセス・パラメータのみが使用できます。
- LOGFILE | NOLOGFILE
- READSIZE
- PREPROCESSOR
ノート:
パラメータDISABLE_DIRECTORY_LINK_CHECKはサポート対象外となりました。例
ここに示すEXTERNAL VARIABLE DATA
句の使用例は、次のシナリオが該当します。
deptxt1.dmp
ダンプ・ファイルは、事前にORACLE_DATAPUMP
アクセス・ドライバで生成されています。PREPROCESSOR
パラメータで指定されたtkexcat
プログラムは、入力データの処理に使用するためにユーザーが用意したプログラムです。
CREATE TABLE deptxt1
(
deptno number(2),
dname varchar2(14),
loc varchar2(13)
)
ORGANIZATION EXTERNAL
(
TYPE ORACLE_LOADER
DEFAULT DIRECTORY dpump_dir
ACCESS PARAMETERS
(
EXTERNAL VARIABLE DATA
LOGFILE 'deptxt1.log'
READSIZE=10000
PREPROCESSOR tkexcat
)
LOCATION ('deptxt1.dmp')
)
REJECT LIMIT UNLIMITED
;
親トピック: record_format_info句
15.3.8 PREPROCESSOR
すべてのデータ・ファイルに対して実行する独自のプリプロセッサ・プログラムを指定するには、record_format_info
PREPROCESSOR
句を使用します。
デフォルト
ありません。
用途
注意:
PREPROCESSOR
句を使用するときに考慮する必要があるセキュリティ上の注意事項があります。
ロードするファイルにORACLE_LOADER
アクセス・ドライバでサポートしていない形式のデータ・レコードが含まれる場合は、PREPROCESSOR
句を使用して、ユーザーが用意するプリプロセッサ・プログラムを指定し、そのプログラムをすべてのデータ・ファイルに対して実行します。プログラムの指定は、引数を使用する場合にシェル・スクリプトに入れる必要があります(「file_spec」
の説明を参照)。
プリプロセッサ・プログラムは、アクセス・ドライバがサポートするレコード形式にデータを変換し、変換したレコード・データを標準出力(stdout)に書き出します。アクセス・ドライバはそのデータを入力として読み取ることになります。
directory_spec
各データ・ファイルに対して実行するプリプロセッサ・プログラムの名前が含まれるディレクトリ・オブジェクトを指定します。外部表にアクセスするユーザーには、使用されるディレクトリ・オブジェクトのEXECUTE
権限が必要です。directory_spec
を省略した場合は、外部表に対して指定されたデフォルトのディレクトリが使用されます。
注意:
セキュリティ上の理由から、プリプロセッサ・プログラムの格納には個別のディレクトリを使用するようにしてください。デフォルト・ディレクトリは使用しないでください。プリプロセッサ・プログラムが格納されているディレクトリには別のファイルを保管しないでください。
セキュリティを維持するために、プリプロセッサ・プログラムは、ディレクトリ・オブジェクト内に存在する必要があります。これは、プログラムへのアクセスを制御できるようにするためです。オペレーティング・システム管理者は、そのディレクトリ・オブジェクトに対応するディレクトリを作成する必要があります。また、データベース用のオペレーティング・システムOracleユーザーが、そのディレクトリにアクセスできることを確認する必要もあります。データベース管理者は、承認されたユーザーのみがディレクトリ・パスに関連付けられたディレクトリ・オブジェクトへのアクセス許可を付与されるようにする必要があります。ディレクトリ・オブジェクトのアクセス権は、複数のデータベース・ユーザーに付与できますが、そのディレクトリ内のプリプロセッサを実行できるのはEXECUTE
権限を持つユーザーのみです。ディレクトリ・オブジェクトへの読取り/書込み権限を持つ既存データベース・ユーザーでは、前処理の機能を使用できません。DBAとして、どのユーザーにもディレクトリ・オブジェクトのEXECUTE
権限を付与しなければ、プリプロセッサの使用を禁止できます。EXECUTE権限の付与方法の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
file_spec
プリプロセッサ・プログラムの名前です。この名前は、使用されているディレクトリ・オブジェクト(directory_spec
または外部表のデフォルト・ディレクトリのいずれか)に関連付けられたパス名の後ろに追加されます。file_spec
に絶対ディレクトリ・パスや相対ディレクトリ・パスを含めることはできません。
プリプロセッサ・プログラムに引数(gunzip -c
など)が必要な場合は、プログラム名とその引数を実行可能シェル・スクリプト(Microsoft Windowsオペレーティング・システムではバッチ(.bat
)・ファイル)で指定する必要があります。次の各項で説明するように、シェル・スクリプトとバッチ・ファイルには特定の要件があります。
オペレーティング・システム・ディレクトリに正しいバージョンのプリプロセッサ・プログラムがあることを必ず確認してください。
シェルやバッチ・ファイルを使用しないで、PREPROCESSOR
句を指定する例を次に示します。
SQL> CREATE TABLE xtab (recno varchar2(2000))
2 ORGANIZATION EXTERNAL (
3 TYPE ORACLE_LOADER
4 DEFAULT DIRECTORY data_dir
5 ACCESS PARAMETERS (
6 RECORDS DELIMITED BY NEWLINE
7 PREPROCESSOR execdir:'zcat'
8 FIELDS (recno char(2000)))
9 LOCATION ('foo.dat.gz'))
10 REJECT LIMIT UNLIMITED;
Table created.
Linuxオペレーティング・システムにおけるPREPROCESSOR句でのシェル・スクリプトの使用
Linuxでシェル・スクリプトを使用する場合は、次の条件が満たされている必要があります。
-
シェル・スクリプトは、
directory_spec
に存在する必要があります。 -
gunzip
などのシステム・コマンドのフルパス名を指定する必要があります。 -
プリプロセッサのシェル・スクリプトには、
EXECUTE
権限が必要です。 -
外部表の
LOCATION
句にリストされているデータ・ファイルは、$1
で参照する必要があります。
次の例は、外部表作成時のPREPROCESSOR
句でのシェル・スクリプトの指定方法を示しています。
SQL> CREATE TABLE xtab (recno varchar2(2000))
2 ORGANIZATION EXTERNAL (
3 TYPE ORACLE_LOADER
4 DEFAULT DIRECTORY data_dir
5 ACCESS PARAMETERS (
6 RECORDS DELIMITED BY NEWLINE
7 PREPROCESSOR execdir:'uncompress.sh'
8 FIELDS (recno char(2000)))
9 LOCATION ('foo.dat.gz'))
10 REJECT LIMIT UNLIMITED;
Table created.
Windowsオペレーティング・システムにおけるPREPROCESSOR句でのバッチ・ファイルの使用
Microsoft Windowsでシェル・スクリプトを使用するには、次の条件が満たされている必要があります。
-
バッチ・ファイルは、
directory_spec
に存在する必要があります。 -
gunzip
などのシステム・コマンドのフルパス名を指定する必要があります。 -
プリプロセッサのバッチ・ファイルには、EXECUTE権限が必要です。
-
バッチ・ファイルの最初の行には、
@echo off
を含める必要があります。これが必要になるのは、バッチ・ファイルが実行されるとき、デフォルトでは実行中のコマンドが表示されるため、このことによって、エコー処理されたコマンドが外部表のアクセス・ドライバへの入力として処理されるという意図しない副次的な影響を回避するためです。 -
location句からの入力を表すには、
%1
を使用する必要があります。(これは、location句が$1
により参照されるUNIXおよびLinuxスタイルのシェル・スクリプトとは異なります。) -
バッチ・ファイル内のすべての実行可能ファイル(次の例では
sed.exe
)のフルパスを指定する必要があります。すべてのMicrosoft WindowsインストールにMKSツールキットが存在するとはかぎらないため、sed.exe
などのコマンドが使用できない場合があることにも注意してください。Microsoft Windowsで使用するバッチ・ファイルは、
.bat
または.cmd
拡張子を持つ必要があります。そうでない場合(たとえば、プリプロセッサ・スクリプトをsed.sh
として指定しようとした場合)は、次のエラーが発生します。SQL> select * from foo ; select * from foo * ERROR at line 1: ORA-29913: error in executing ODCIEXTTABLEFETCH callout ORA-29400: data cartridge error KUP-04095: preprocessor command C:/Temp\sed.sh encountered error "CreateProcess Failure for Preprocessor: C:/Temp\sed.sh, errorcode: 193
Windowsでバッチ・ファイルを外部表のPREPROCESSOR
オプションとともに使用する単純な例を、次に示します。この例では、バッチ・ファイルはストリーム・エディタ(sed.exe
)ユーティリティを使用して、入力データの単純な変換を実行します。
SQL> create table deptXT (deptno char(2),
2 dname char(14),
3 loc char(13)
4 )
5 organization external
6 (
7 type ORACLE_LOADER
8 default directory def_dir1
9 access parameters
10 (
11 records delimited by newline
12 badfile 'deptXT.bad'
13 logfile 'deptXT.log'
14 preprocessor exec_dir:'sed.bat'
15 fields terminated by ','
16 missing field values are null
17 )
18 location ('deptXT.dat')
19 )
20 reject limit unlimited ;
Table created.
select * from deptxt ;
Where deptxt.dat contains:
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
51,OPERATIONS,BOSTON
プリプロセッサ・プログラムsed.bat
の内容は次のとおりです。
@echo off
c:/mksnt/mksnt/sed.exe -e 's/BOSTON/CALIFORNIA/' %1
PREPROCESSOR
オプションは、入力データ(deptxt.dat
)をsed.bat
に渡します。次にdeptxt
表から選択すると、最後の2行のLOC
列(以前はBOSTON
であった列)がCALIFORNIA
になっています。
SQL> select * from deptxt ;
DE DNAME LOC
-- -------------- -------------
20 RESEARCH, DALLAS
30 SALES CHICAGO
40 OPERATIONS CALIFORNIA
51 OPERATIONS CALIFORNIA
4 rows selected.
PREPROCESSOR句によるパラレル処理の使用上のノート
外部表では、LOCATION
句で指定した各データ・ファイルが単一グラニュルとして扱われます。PREPROCESSOR
句によるパラレル処理を最大限に活用するために、ロードするデータを複数ファイル(グラニュル)に分割することをお薦めします。外部表における並列度が、存在するデータ・ファイル数にまで制限されます。たとえば、並列度を16に指定し、データ・ファイルが10個のみ存在する場合、10個の子プロセスがビジー、6個がアイドル状態になるため、実際の並列度は10になります。データの処理の効率を向上するために、子プロセスがアイドル状態にならないようにします。並列度を指定する場合は、すべての子プロセスがビジー状態を維持するようにして、指定する並列度がデータ・ファイルの数を超えないようにしてください。並列度のグラニュルの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
また、オブジェクト・ストア・データは、ファイル・システム・ファイルで使用するものと同じプリプロセッサ・スクリプトを使用して処理できないことにも注意してください。オブジェクト・ストア・データにプリプロセッサを使用する場合は、オブジェクト・ストア・データにアクセスできるプリプロセッサ・スクリプトを作成し、データを変更する必要があります。たとえば、LinuxまたはUNIXシステムではこの場合、$1
はhttps://www.yoururl.example.com/yourdata
などのソースを表します。
@echo off
#!/bin/sh/your_script_or_plsql_function_to_display_objectstore_contents($1) | sed -e 's/BOSTON/CALIFORNIA/'
この構文を使用すると、プリプロセッサがデータを取得してstdout
に送信し、これをパイプしてアクセス・ドライバが読み取れるようにします。
PREPROCESSOR句を使用する際の制限事項
-
Oracle Database Vault機能を使用するデータベースでは、
PREPROCESSOR
句を使用できません。 -
PREPROCESSOR
句は、COLUMN
TRANSFORMS
句とともには使用できません。
- PREPROCESSOR句によるパラレル処理の使用
PREPROCESSOR
句によるパラレル処理の使用。 - PREPROCESSOR句を使用する際の制限事項
PREPROCESSOR
句を使用する際の制限事項について説明します。
親トピック: record_format_info句
15.3.8.1 PREPROCESSOR句によるパラレル処理の使用
PREPROCESSOR
句によるパラレル処理の使用。
外部表では、LOCATION
句で指定した各データ・ファイルが単一グラニュルとして扱われます。PREPROCESSOR
句によるパラレル処理を最大限に活用するには、ロードされるデータを複数ファイル(グラニュル)に分割する必要があります。これは、外部表における並列度が、存在するデータ・ファイル数までに制限されるためです。たとえば、並列度を16に指定し、データ・ファイルが10個のみ存在する場合には、10個のスレーブ・プロセスがビジーとなり、6個がアイドル状態になるため、実際の並列度は10となります。アイドル状態のスレーブ・プロセスがないことが最適な状態です。したがって、並列度を指定する場合、すべてのスレーブ・プロセスがビジーになるように、並列度がデータ・ファイル数を超えないことが理想的です。
関連項目:
-
並列度のグラニュルの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。
親トピック: PREPROCESSOR
15.3.8.2 PREPROCESSOR句を使用する際の制限事項
PREPROCESSOR
句を使用する際の制限事項について説明します。
-
Oracle Database Vault機能を使用するデータベースでは、
PREPROCESSOR
句を使用できません。 -
PREPROCESSOR
句は、COLUMN
TRANSFORMS
句とともには使用できません。
親トピック: PREPROCESSOR
15.3.9 LANGUAGE
LANGUAGE
句を使用すると、言語名(FRENCH
など)を指定できます。この言語名から、データのロケールに依存する情報が得られます。
次に、言語名から得られる情報のタイプの例を示します。
-
月と日の名前およびその略称
-
A.M.、P.M.、A.D.およびB.C.と同じ内容を表す記号
-
ORDER BY
SQL句が指定されている場合の文字データのデフォルトのソート順序 -
筆記方向(右から左、左から右)
-
肯定および否定応答の文字列(たとえば
YES
とNO
)
関連項目:
Oracleでサポートされる言語のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。親トピック: record_format_info句
15.3.10 TERRITORY
TERRITORY
句を使用すると、地域名を指定して、入力データの特性をより詳細に指定することができます。
たとえば、カンマではなく小数点(531,298のかわりに531.298など)が数字に使用される国もあります。
関連項目:
Oracleでサポートされる地域のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。親トピック: record_format_info句
15.3.11 DATA IS...ENDIAN
DATA IS...ENDIAN
句を使用して、データ・ファイルを生成したプラットフォームによってバイト順序が異なるデータのエンディアンを指定します。
用途
データ・ファイルを生成したプラットフォームによってバイト順序が異なるデータのエンディアンを指定します。
使用上のノート
次の型のフィールドは、この句の影響を受けます。
INTEGER
UNSIGNED INTEGER
FLOAT
BINARY_FLOAT
DOUBLE
BINARY_DOUBLE
VARCHAR
(数値のみ)VARRAW
(数値のみ)- UTF16文字セットの任意の文字データ型
RECORDS DELIMITED BY string
,によって指定するUTF16文字セット文字列
Microsoft Windowsベースのプラットフォームでは、リトル・エンディアン・データが生成されます。ビッグ・エンディアン・プラットフォームには、Oracle SolarisおよびIBM zSeriesベースのLinuxが含まれます。DATA IS...ENDIAN
句を指定しない場合、データは、アクセス・ドライバが実行されているプラットフォームと同じエンディアンになります。UTF-16データ・ファイルには、ファイルの先頭にデータのエンディアンを示すマークがある場合があります。存在する場合、このマークはDATA IS...ENDIAN
句をオーバーライドします。
親トピック: record_format_info句
15.3.12 BYTEORDERMARK [CHECK | NOCHECK]
record_format_info
BYTEORDERMARK
句を使用すると、バイト順序マーク(BOM)の有無をデータファイルでチェックするかどうかを指定できます。
デフォルト
CHECK
構文
BYTEORDERMARK [CHECK | NOCHECK]
用途
BYTEORDERMARK
句を使用すると、バイト順序マーク(BOM)の有無をデータファイルでチェックするかどうかを指定できます。この句は、文字セットがUnicodeの場合にのみ有効です。
BYTEORDERMARK NOCHECK
を指定すると、データ・ファイルにBOMが存在するかどうかが確認されず、データ・ファイルのすべてのデータがデータとして読み込まれます。
BYTEORDERMARK CHECK
を指定すると、データ・ファイルにBOMがあるかどうかを確認します。これはUnicode文字セットのデータ・ファイルについてのデフォルト動作です。
使用上のノート
次に、使用例をいくつか示します。
-
データをリトル・エンディアンまたはビッグ・エンディアンとして指定し、
CHECK
を指定したときにそのエンディアンがデータ・ファイルと一致していないと判断された場合は、エラーが返されます。たとえば、次のパラメータを指定したとします。DATA IS LITTLE ENDIAN BYTEORDERMARK CHECK
Unicodeデータ・ファイル内にBOMが存在するかどうかが確認され、そのデータが実際にはビッグ・エンディアンであった場合は、リトル・エンディアンを指定していたため、エラーが返されます。
-
BOMが存在せず、
DATA IS...ENDIAN
パラメータを使用してエンディアンを指定しない場合は、プラットフォームのエンディアンが使用されます。 -
BYTE ORDER MARK NOCHECK
を指定し、DATA IS...ENDIAN
パラメータを使用してエンディアンを指定した場合は、そのエンディアン値が使用されます。それ以外の場合は、プラットフォームのエンディアンが使用されます。
関連トピック
親トピック: record_format_info句
15.3.13 STRING SIZES ARE IN
record_format_info
STRING SIZES ARE IN
句を使用すると、文字列に指定された長さがバイト単位か文字単位かを指定できます。
デフォルト
ありません。
構文
STRING SIZES ARE IN [BYTES | CHARACTERS]
用途
STRING SIZES ARE IN
句を使用して、文字列の長さがバイト単位であるか、または文字単位であるかを指定します。この句を指定しない場合、アクセス・ドライバは、データベースが使用するモードを使用します。長さが埋め込まれた文字型(VARCHAR
など)も、この句の影響を受けます。この句を指定すると、埋め込まれた長さは、バイト数ではなく、文字数となります。UTF16などのマルチバイト文字セットのロード時には、STRING SIZES ARE IN CHARACTERS
を指定する必要があります。
親トピック: record_format_info句
15.3.14 LOAD WHEN
record_format_info
LOAD WHEN
句を使用すると、データベースに渡されるレコードを識別できます。
デフォルト
構文
LOAD WHEN
句の構文は、次のとおりです。ここで、condition_spec
は条件指定です。
LOAD WHEN condition_spec
用途
LOAD WHEN condition_spec
句を使用して、データベースに渡すレコードを識別します。評価の方法は様々です。
-
condition_spec
句がレコードのフィールドを参照する場合、この句は、すべてのフィールドがレコードから解析された後で、NULLIF
句またはDEFAULTIF
句の評価が行われる前にのみ評価されます。 -
条件指定が範囲のみを参照する(フィールド名は参照しない)場合、フィールドが解析される前に句が評価されます。このユースケースは、ロードしないファイル内のレコードをエラーなしで現在のレコード定義に解析できない場合に役立ちます。
例
次に、LOAD WHEN
の使用例を示します。
LOAD WHEN (empid != BLANKS) LOAD WHEN ((dept_id = "SPORTING GOODS" OR dept_id = "SHOES") AND total_sales != 0)
関連トピック
親トピック: record_format_info句
15.3.15 BADFILE | NOBADFILE
record_format_info
BADFILE
句を使用すると、エラーのためにレコードをロードできない場合にレコードが書き込まれるファイルに名前を付けることができます。
デフォルト
デフォルト名で不良ファイルを作成します。詳細は、「用途」を参照してください。
構文
BADFILE name | NOBADFILE
用途
BADFILE
句を使用して、エラーのためにロードできない場合にレコードが書き込まれるファイルを指定します。たとえば、データ・ファイルのフィールドを外部表の列のデータ型に変換できなかった場合、不良ファイルにレコードが書き込まれます。不良ファイルの目的は、すべての拒否されたデータを調査および修正して、ファイルをロードできるようにすることです。不良レコードがあってもデータを修正しない場合は、NOBADFILE
オプションを使用して不良ファイルの作成を回避できます。
BADFILE
句を指定する場合、ディレクトリ・オブジェクト名またはファイル名(あるいはその両方)を指定する必要があります。詳細は、「[directory object name:] [filename]」
を参照してください。
NOBADFILE
を指定すると、不良ファイルは作成されません。
BADFILE
またはNOBADFILE
のいずれも指定しない場合、デフォルトでは1つ以上のレコードが拒否されると、不良ファイルが作成されます。このファイルの名前は、表名の後に_%p
が付いたものになります(%p
は、ファイル作成プロセスのPIDで置き換えられます)。ファイルには拡張子.bad
が付けられます。ディレクトリ・ナビゲーションとして解釈できない文字(%、/、*など)が表名に含まれる場合、これらの文字は出力ファイル名に含められません。
LOAD WHEN
句が正常に実行されない場合、レコードは不良ファイルには書き込まれず、かわりに、廃棄ファイルに書き込まれます。また、外部表のレコードを使用中にエラーが発生する場合は(外部表に対してINSERT INTO...AS SELECT...
を使用した場合の制約違反など)、レコードは不良ファイルに書き込まれません。
親トピック: record_format_info句
15.3.16 DISCARDFILE | NODISCARDFILE
record_format_info
DISCARDFILE
句を使用すると、LOAD WHEN
句の条件を満たさないレコードが書き込まれるファイルに名前を付けることができます。
デフォルト
デフォルト名で廃棄ファイルを作成します。詳細は、「用途」を参照してください。
構文
DISCARDFILE name | NODISCARDFILE
用途
DISCARDFILE
句を使用して、レコードがLOAD WHEN
句の条件を満たすことができないことが書き込まれるファイルを指定します。この廃棄ファイルは、廃棄される最初のレコードが検出されると作成されます。同じ外部表が複数回アクセスされる場合、廃棄ファイルはそのたびに再度書き込まれます。廃棄レコードを個別のファイルに保存する必要がない場合、NODISCARDFILE
を使用します。
DISCARDFILE
を指定する場合、ディレクトリ・オブジェクト名またはファイル名(あるいはその両方)を指定する必要があります。詳細は、「[directory object name:] [filename]」
を参照してください。
NODISCARDFILE
を指定すると、廃棄ファイルは作成されません。
DISCARDFILE
またはNODISCARDFILE
のいずれも指定しない場合、デフォルトでは1つ以上のレコードでLOAD WHEN
句が失敗すると、廃棄ファイルが作成されます。このファイルの名前は、表名の後に_%p
が付いたものになります(%p
は、ファイル作成プロセスのPIDで置き換えられます)。ファイルには拡張子.dcs
が付けられます。ディレクトリ・ナビゲーションとして解釈できない文字(%
、/
、*
など)が表名に含まれる場合、これらの文字はファイル名に含められません。
親トピック: record_format_info句
15.3.17 LOGFILE | NOLOGFILE
record_format_info
LOGFILE
句を使用して、データ・ファイル内のデータへのアクセス中に外部表ユーティリティによって生成されたメッセージを含むファイルに名前を付けます。
デフォルト
既存のファイルを使用するか、デフォルト名でログ・ファイルを作成します。詳細は、「用途」を参照してください。
構文
LOGFILE name | NOLOGFILE
用途
LOGFILE
句を使用して、データ・ファイルのデータへのアクセス中に外部表のユーティリティによって生成されたメッセージを含むファイルを指定します。ログ・ファイルがすでに同じ名前で存在する場合は、アクセス・ドライバによってそのログ・ファイルが再びオープンされ、新しいログ情報がファイルの終わりに追加されます。この点では、既存のファイルを上書きする不良ファイルおよび廃棄ファイルとは異なります。NOLOGFILE
句を使用してログ・ファイルの作成を回避できます。
LOGFILE
を指定する場合、ディレクトリ・オブジェクト名またはファイル名(あるいはその両方)を指定する必要があります。詳細は、「[directory object name:] [filename]」
を参照してください。
NOLOGFILE
を指定した場合、ログ・ファイルは作成されません。
LOGFILE
またはNOLOGFILE
のいずれも指定しない場合、デフォルトではログ・ファイルが作成されます。このファイルの名前は、表名の後に_%p
が付いたものになります(%p
は、ファイル作成プロセスのPIDで置き換えられます)。ファイルには拡張子.log
が付けられます。ディレクトリ・ナビゲーションとして解釈できない文字(%
、/
、*
など)が表名に含まれる場合、これらの文字はファイル名に含められません。
親トピック: record_format_info句
15.3.18 SKIP
record_format_info
SKIP
句を使用すると、ロードする前にデータファイル内の指定した数のレコードをスキップできます。
デフォルト
なし (0
)
構文
構文は次のとおりです。ここで、num
はスキップするレコードの数です(デフォルトは0)。
SKIP = num
用途
SKIP
句は、ロードの前に、データ・ファイルに含まれる指定した件数のレコードをスキップします。この句を指定できるのは、データにパラレルにアクセスしない場合にのみです。同じ表について同じ場所に複数のデータ・ファイルがある場合、SKIP
句を指定すると、ORACLE_LOADER
ドライバが最初のデータ・ファイルに含まれる指定した件数のレコードのみをスキップします。
親トピック: record_format_info句
15.3.19 FIELD NAMES
record_format_info
FIELD NAMES
句を使用して、データファイルのフィールド順序を指定します。
デフォルト
NONE
構文
FIELD NAMES {FIRST FILE | FIRST IGNORE | ALL FILES | ALL IGNORE| NONE}
FIELD NAMES
のオプションは次のとおりです。
FIRST FILE
—最初のデータ・ファイルに、最初のレコードのデータに対応するフィールド名のリストが含まれることを示します。このリストでは、データ・ファイルのデータと同じデリミタが使用されます。このレコードは、データ・ファイルのフィールドとターゲット表の列とのマッピングを設定するために読み取られ、使用されます。このレコードは、データが処理されるとスキップされます。このオプションは、データ・ファイルのフィールドの順序が表の列の順序とは異なる場合に役立ちます。FIRST IGNORE
—最初のデータ・ファイルに、最初のレコードのデータに対応するフィールド名のリストが含まれるが、その情報は無視する必要があることを示します。このレコードは、データが処理されるとスキップされますが、フィールドの設定には使用されません。ALL FILES
— すべてのデータ・ファイルに、最初のレコードのデータに対応するフィールド名のリストが含まれることを示します。データ・ファイル内のフィールドの順序は、どのような順序でもかまいません。順序は、各ファイルの最初の行によって指定されます。アクセス・ドライバでは、外部表の列とは異なる順序でフィールドが指定されます。ALL IGNORE
—すべてのデータ・ファイルに、最初のレコードのデータに対応するフィールド名のリストが含まれるが、その情報は無視する必要があることを示します。このレコードは、すべてのデータ・ファイルでデータが処理されるとスキップされますが、フィールドの設定には使用されません。NONE
—データ・ファイルに、最初のレコードの通常のデータが含まれることを示します。このオプションがデフォルトです。
用途
FIELD NAMES
句を使用すると、いずれかのオプションを使用して、データ・ファイルの最初の行のデータ・ファイルのフィールド順序を指定できます。たとえば、FIELD NAMES FIRST FILE
が指定されている場合、最初のデータ・ファイルのみが行ヘッダーを持ちます。FIELD NAMES ALL FILESが指定されている場合、すべてのデータ・ファイルに行ヘッダーが含まれます。
制限事項
-
FIELD NAMES
句では、データ・ファイル内のフィールド名の間の空白は切り捨てられません。たとえば、データ・ファイルにフィールド名
deptno, dname, LOC
(フィールド名の間に空白を含む)がある場合、FIELD NAMES
の指定に失敗し、「KUP-04117: フィールド名LOCがアクセス・パラメータ・フィールド・リストまたは表に見つかりませんでした。」と表示されます。 -
データ・ファイルのフィールド名は、引用符を使用できません。たとえば、次の列のフィールド名はサポートされていません:
deptno,"dname",loc
- 最初の列ヘッダー行では、埋込みデリミタはサポートされていません。
例
通常、列(COL1、COL2、COL3)を含む表を生成するデータ・ファイルのフィールドはデータ・ファイル内にあり、表と同じ順序です。ただし、次の例では、deptxt1.dat
およびdeptxt2.dat
のデータ・ファイル・フィールドの順序は異なります。FIELD NAMES ALL FILES
を指定すると、1つ以上のデータ・ファイルのフィールド名の順序が異なるデータ・フィールドを正しく問い合せることができます:
[admin@example]$ cat /tmp/deptxt1.dat
deptno,dname,loc
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
[admin@example]$ cat /tmp/deptxt2.dat
dNamE,lOc,DEPTNO
ACCOUNTING,NEW YORK,11
RESEARCH,DALLAS,21
SALES,CHICAGO,31
OPERATIONS,BOSTON,41
[admin@example]$ sql @xt
Connected.
Directory created.
SQL> create table deptXT
2 (
3 deptno number(2),
4 dname varchar2(14),
5 loc varchar2(13)
6 )
7 organization external
8 (
9 type ORACLE_LOADER
10 DEFAULT DIRECTORY DATA_DIR
11 access parameters
12 (
13 records delimited by newline
14 field names all files
15 logfile 'deptxt.log'
16 badfile 'deptxt.bad'
17 fields terminated by ','
18 missing field values are null
19 )
20 location ('deptxt?.dat')
21 )
22 reject limit unlimited
23 ;
Table created.
SQL> Rem returns all 8 rows
SQL> select deptno, dname, loc from deptxt order by deptno;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
11 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
21 RESEARCH DALLAS
30 SALES CHICAGO
31 SALES CHICAGO
40 OPERATIONS BOSTON
41 OPERATIONS BOSTON
親トピック: record_format_info句
15.3.20 READSIZE
READSIZE
パラメータは、レコードの処理に使用する読取りバッファのサイズを指定します。
読取りバッファのサイズは、アクセス・ドライバで処理する最大入力レコードのサイズ以上にする必要があります。サイズは、整数のバイト数で指定します。デフォルト値は512KB(524288バイト)です。データ・ファイル内に512KBより大きいレコードがある場合は、デフォルト値より大きい値を指定する必要があります。READSIZE
のサイズに上限はありませんが、アクセス・ドライバで割当て可能なメモリーの最大量が事実上の上限となります。
追加のバッファが割り当てられる場合もあるため、割当てに使用可能なメモリーの量によっても制限されます。追加のバッファは、(データ内、デリミタ、またはマルチ・キャラクタ/バイトのデリミタが使用されている場合はそのデリミタのいずれかで)分割された可能性のあるレコードの処理を正常に完了するために使用されます。
親トピック: record_format_info句
15.3.21 DISABLE_DIRECTORY_LINK_CHECK
DISABLE_DIRECTORY_LINK_CHECK
パラメータは、ORACLE_LOADER
アクセス・ドライバにシンボリック・リンク・チェックをバイパスするように指示します。
デフォルトでは、ORACLE_LOADER
アクセス・ドライバは、データやログ・ファイルを開く前にチェックを行い、使用するディレクトリがシンボリック・リンクでないことを確認します。DISABLE_DIRECTORY_LINK_CHECK
パラメータ(引数なし)を指定して、このチェックを回避するようにアクセス・ドライバに指示すると、親ディレクトリがシンボリック・リンクの可能性があるファイルも使用できます。
ノート:
シンボリック・リンクは外部表のロード操作での入力や出力をリダイレクトするために使用される可能性もあるため、このパラメータの使用にはセキュリティのリスクが伴います。親トピック: record_format_info句
15.3.22 DATE_CACHE
デフォルトでは、(1000要素に対して)日付キャッシュ機能が使用できます。日付キャッシュ機能を完全に使用禁止にするには、0
(ゼロ)に設定します。
DATE_CACHE
は、日付キャッシュ・サイズ(エントリ数)を指定します。たとえば、DATE_CACHE=5000
を指定すると、作成された日付キャッシュごとに最大5000の一意の日付エントリが含まれます。必要に応じて、すべての表に固有の日付キャッシュが作成されます。日付キャッシュは、表への格納のためにデータ型変換が必要な日付値またはタイムスタンプ値が1つ以上ロードされた場合にのみ作成されます。
日付キャッシュ機能は、デフォルトで使用可能です。デフォルトの日付キャッシュ・サイズは1000要素です。デフォルトのサイズを使用し、1000を超える一意の入力値をロードすると、日付キャッシュ機能は、この表に対して自動的に使用禁止となります。ただし、デフォルトを変更して0以外の日付キャッシュ・サイズを指定し、キャッシュ量がこのサイズを超えた場合、キャッシュは使用禁止になりません。
ログ・ファイルに含まれている日付キャッシュ統計(エントリ数、ヒット数、ミス数)を使用して、将来、同様のロードを行うときのためにキャッシュのサイズを調整できます。
関連項目:
親トピック: record_format_info句
15.3.23 string
stringは、引用符で囲まれた一連の文字または16進数字です。
用途
一連の文字の場合、これらの文字はデータ・ファイルの文字セットに変換されます。また、16進数字の場合には、偶数にする必要があります。16進数字は、バイナリに翻訳されたものに変換され、その翻訳結果はデータ・ファイルの文字セット内の文字列として処理されます。これは、16進数字がバイナリに翻訳されたものに変換された後では、他の文字セットの翻訳が実行されないことを意味します。
親トピック: record_format_info句
15.3.24 condition_spec
condition_spec
では、ブール演算子で結合される1つ以上の条件を指定します。
この句は、真または偽のいずれかに評価される式です。条件およびブール演算子は、左から右へと評価されます。(ブール演算子は、条件が評価された後に適用されます。)ブール演算子のデフォルトの評価順序を上書きするには、カッコを使用します。condition_spec
句の評価にはより多くのレコード処理時間が必要であるため、多くの句を使用しないようにする必要があります。condition_spec
の構文は次のとおりです。
条件指定にフィールド名を参照する条件が含まれている場合、条件指定は、すべてのフィールドがレコードで検出され、空白の切捨てが行われた後のみに評価されます。空白がフィールドから切り捨てられている場合、フィールドとBLANKS
の比較は有効ではありません。
次に、condition_spec
の使用例を示します。
empid = BLANKS OR last_name = BLANKS
(dept_id = SPORTING GOODS OR dept_id = SHOES) AND total_sales != 0
関連項目:
親トピック: record_format_info句
15.3.25 [directory object name:] [filename]
[directory object name:] [filename]
句を使用して、出力ファイルの名前(BADFILE
、DISCARDFILE
またはLOGFILE
)を指定します。
構文
[directory object name:] [filename]
directory object name
: ファイルの読取りおよび書込みのためのデータベース・サーバー上のオペレーティング・システム・ディレクトリの別名。filename
: ディレクトリ・オブジェクト内に作成するファイルの名前。
パラレル・ロードでファイル名を一意にするために、アクセス・ドライバは記号置換を行います。Linux、UNIXおよびMicrosoft Windowsオペレーティング・システムでサポートされる記号置換は、次のとおりです(その他のプラットフォームでは、別の記号が使用される場合があります)。
-
%p
は、現行のプロセスのプロセスIDに置換されます。たとえば、アクセス・ドライバのプロセスIDが
12345
の場合、exttab_%p.log
として指定されたファイル名はexttab_12345.log
となります。 -
%a
は、現行のプロセスのエージェント番号に置換されます。エージェント番号は、外部表にアクセスしている各パラレル・プロセスに割り当てられた一意の番号です。この番号には、3文字になるように、左側に0が埋められます。たとえば、3番目のパラレル・エージェントがファイルを作成する場合、
bad_data_%a.bad
をファイル名として指定した場合、エージェントはbad_data_003.bad
というファイルを作成します。 -
%%
は、%
に置換されます。ファイル名にパーセント符号が必要な場合、この記号置換が使用されます。%
文字が検出され、前述の文字以外の文字がその後に続く場合、エラーが返されます。
用途
出力ファイルの名前(BADFILE
、DISCARDFILE
またはLOGFILE
)を指定します。
使用上のノート
この句を使用するには、ディレクトリ・オブジェクト名またはファイル名(あるいはその両方)を指定する必要があります。そのディレクトリ・オブジェクト名は、外部表にアクセスしているユーザーが書込み権限を所有しているディレクトリ・オブジェクトの名前です。このディレクトリ・オブジェクト名を指定しない場合、CREATE
TABLE...
ORGANIZATION
EXTERNAL
文のDEFAULT
DIRECTORY
句に対して指定した値が使用されます。
%p
または%a
を使用しないで出力ファイルに対して一意のファイル名を作成し、外部表にパラレルでアクセス中の場合、出力ファイルが破損するか、エージェントがファイルに書込みできないことがあります。
BADFILE
(あるいはDISCARDFILE
またはLOGFILE
)を指定しない場合、SQL_LOADER
アクセス・ドライバでは、表の名前に_%p
を付けたものがファイル名として使用されます。ファイルに拡張子がない場合は、デフォルトの拡張子が使用されます。デフォルトの拡張子は、不良ファイルでは.bad
、廃棄ファイルでは.dsc
、ログ・ファイルでは.log
となります。
親トピック: record_format_info句
15.3.26 condition
condition
を使用して、定数文字列とレコードのバイト範囲またはフィールドを比較します。比較のソースは、レコードのフィールドまたはレコードのバイト範囲のいずれかです。比較はバイト単位で実行されます。文字列を比較のターゲットとして指定すると、データ・ファイルの文字セットに変換されます。フィールドに文字以外のデータ型が含まれる場合、フィールド値または文字列のどちらでもデータ型変換は実行されません。condition
の構文は次のとおりです。
- range start : range end
range start:range end
句は、レコードに含まれるバイト数または文字数の範囲を記述して条件に使用します。
親トピック: record_format_info句
15.3.26.1 range start : range end
range start:range end
句は、レコードに含まれるバイト数または文字数の範囲を記述して条件に使用します。
STRING SIZES ARE
句に入力した値によって、range
がバイト数を示すか、文字数を示すかを決定します。range start
およびrange end
は、レコードへのバイト・オフセットまたは文字オフセットです。range start
は、range end
以下である必要があります。文字範囲の検索は、可変幅文字セットのデータに対してより固定幅文字セットのデータに対しての方が速く処理されます。範囲が、存在しないレコードの一部を指す場合、その範囲を参照しようとするとレコードは拒否されます。range start:range end
は、カッコで囲む必要があります。たとえば: (10:13)
。
ノート:
データ・ファイルには、バイナリ・データ(VARCHAR
などのバイナリ・カウントのあるデータ型を含む)および文字データ(可変幅文字セットが使用されているか、または文字幅が1バイトより大きいデータ)が混在しないようにする必要があります。この場合、アクセス・ドライバは、開始位置の検索時にバイナリ・データを文字データとして処理するため、フィールドの適切な開始位置を検索できない場合があります。
次に、condition
の使用例を示します。
LOAD WHEN empid != BLANKS
LOAD WHEN (10:13) = 0x'00000830'
LOAD WHEN PRODUCT_COUNT = "MISSING"
親トピック: 条件
15.3.27 IO_OPTIONS句
IO_OPTIONS
句によって、オペレーティング・システムがデータ・ファイルを読み取るために使用するI/Oオプションを指定できます。指定可能なオプションはDIRECTIO
(デフォルト)とNODIRECTIO
のみです。
DIRECTIO
オプションはデフォルトで使用され、直接I/Oを使用してデータ・ファイルのオープンおよび読取りが試行されます。試行が成功した場合、オペレーティング・システムとNFSサーバー(ファイルがNFSサーバー上にあるとき)では、ファイルから読み取ったデータをキャッシュしません。これにより、特にファイルが大きい場合に、データ・ファイルの読取りパフォーマンスが向上します。読取り対象のデータ・ファイルについて直接I/Oがサポートされない場合、ファイルは開かれて読み取られますがDIRECTIO
オプションは無視されます。
IO_OPTIONS
句がNODIRECTIO
オプションを使用して指定されている場合、データ・ファイルの読取りに直接I/Oは使用されません。
IO_OPTIONS
句がまったく指定されていない場合、デフォルトのDIRECTIO
オプションが使用されます。
親トピック: record_format_info句
15.3.28 DNFS_DISABLE | DNFS_ENABLE
これらのパラメータを使用して、外部表操作中の入力データ・ファイルに対するDirect NFSクライアントの使用を有効化および無効化できます。
Direct NFSクライアントは、Oracleがファイル・サーバー上のファイルにアクセスする際のパフォーマンスを向上するために、ファイル・サーバーで実装できるAPIです。
外部表では、1GBを超えるデータ・ファイルを読み取る場合にデフォルトでDirect NFSクライアント・インタフェースが使用されます。よりサイズの小さいファイルでは、オペレーティング・システムのI/Oインタフェースが使用されます。すべての入力データ・ファイルでDirect NFSクライアントを使用するには、DNFS_ENABLE
を使用します。
すべてのデータ・ファイルでDirect NFSクライアントの使用を無効にするには、DNFS_DISABLE
を指定します。
関連項目:
-
NFSでDirect NFSクライアントのOracle Disk Manager Controlを有効化する方法の詳細は、『Oracle Grid Infrastructureインストレーション・ガイドfor Linux』を参照してください。
親トピック: record_format_info句
15.3.29 DNFS_READBUFFERS
record_format_info
句のDNFS_READBUFFERS
パラメータを使用して、Direct NFSクライアントによって使用される読取りバッファの数を制御します。
DNFS_READBUFFERS
を使用して、Direct NFSクライアントによって使用される読取りバッファの数を制御できます。Direct NFSクライアントは、Oracleがファイル・サーバー上のファイルにアクセスする際のパフォーマンスを向上するために、ファイル・サーバーで実装できるAPIです。
DNFS_READBUFFERS
のデフォルト値は4です。
より大きい値を使用すると、Direct NFSクライアント・ファイル・サーバーからの一貫性のないI/Oに対処できますが、メモリー使用量が増大する可能性があります。
関連項目:
-
NFSでDirect NFSクライアントのOracle Disk Manager Controlを有効化する方法の詳細は、『Oracle Grid Infrastructureインストレーション・ガイドfor Linux』を参照してください。
親トピック: record_format_info句
15.4 field_definitions句
field_definitions
句では、FIELDS
パラメータを使用してデータ・ファイルのフィールドに名前を付け、それらのレコード内での検索方法を指定します。
field_definitions
句が省略された場合、次のことが想定されます。
-
フィールドは「,」で区切られる
-
フィールドのデータ型は
CHAR
である -
フィールドの最大長は255である
-
データ・ファイルのフィールドの順序は、外部表で定義されたフィールドの順序となる
-
空白はフィールドから切り捨てられない。
次に、アクセス・パラメータを含まずに作成する外部表の例を示します。その後に、外部表をロードするために使用できるデータ・ファイルのサンプルinfo.dat
を示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir LOCATION ('info.dat')); Alvin,Tolliver,1976 Kenneth,Baer,1963
field_definitions
句の構文は次のとおりです。
IGNORE_CHARS_AFTER_EOR
オプションのこのパラメータは、最後のエンドオブレコードの後、かつエンドオブファイルより前に、レコードの定義に一致しない不要な文字が見つかった場合、その文字を無視するように指定します。
次の4つの条件がすべて当てはまると、エラー・メッセージが外部表のログ・ファイルに書き込まれます。
-
IGNORE_CHARS_AFTER_EOR
パラメータが設定されているか、フィールドが自由書式可能になっている(自由書式可能とは、フィールドが可変長であるか、フィールドがデリミタまたは囲み文字で指定されていて可変長であるかのいずれかです)。 -
文字がファイル内の最後のエンドオブレコードの後にある。
-
アクセス・パラメータ
MISSING FIELD VALUES ARE NULL
が設定されていない。 -
フィールドに絶対位置が設定されていない。
外部表のログ・ファイルに書き込まれるエラー・メッセージは次のとおりです。
KUP-04021: field formatting error for field Col1 KUP-04023: field start is after end of record KUP-04101: record 2 rejected in file /home/oracle/datafiles/example.dat
CSV
外部表でカンマ区切り値形式のファイルであるデータ・ファイルにアクセスするには、FIELDS
CSV
句を使用します。これによって、ファイルは、通常の改行文字列(たとえば、UNIXまたはLinuxオペレーティング・システムの場合は\n
、Windowsオペレーティング・システムの場合は\n
または\r\n
)を含むストリーム・レコード形式のファイルであるとみなされます。データ値にはレコード終了記号含める(埋め込む)ことができます。FIELDS
CSV
句の構文は次のとおりです。
FIELDS CSV [WITH EMBEDDED | WITHOUT EMBEDDED] [TERMINATED BY ','] [OPTIONALLY ENCLOSED BY '"']
FIELDS
CSV
句の主なポイントは次のとおりです。
-
デフォルトでは、
FIELDS
CSV
句を使用しません。 -
WITH
EMBEDDED
およびWITHOUT
EMBEDDED
オプションでは、データにレコード終了記号が含まれている(埋め込まれている)かどうかを指定します。WITH
EMBEDDED
オプションがデフォルトです。 -
WITH
EMBEDDED
を使用する場合、埋込みのレコード終了記号は囲む必要があり、データ・ファイル内の並列度は外部表ロードでは無効になります。 -
TERMINATED BY ','
およびOPTIONALLY ENCLOSED BY '"'
オプションはデフォルトのため、指定する必要はありません。これらは別の終了記号や囲み文字で上書きできます。 -
CSV
句を使用する場合、フィールド・レベルでのデリミタ指定は許可されず、区切ることが可能なデータ型のみ許可されます。区切ることが可能なデータ型には、CHAR
、日時、期間および数値型EXTERNAL
が含まれます。 -
CSV句を指定する場合、
TERMINATED
BY
およびENCLOSED
BY
句は、フィールド・レベルでは使用できません。 -
CSV
句を指定する場合、デフォルトの切捨て動作はLDRTRIM
です。これを上書きするには、外部表の他の切捨てオプション(NOTRIM
、LRTRIM
、LTRIM
またはRTRIM
)のいずれかを指定します。 -
CSV
句は、IGNORE_CHARS_AFTER_EOR
句の後で、delim_spec
句の前に指定する必要があります。
delim_spec句
delim_spec
句を使用して、レコード内のすべてのフィールドの終了位置を識別します。すべてのフィールドに指定されるdelim_spec
は、特定のフィールドに対してfield_list
句の一部として上書きできます。構文の詳細は、「delim_spec」を参照してください。
trim_spec句
trim_spec
句を使用して、すべての文字フィールドでデフォルトとして実行される空白の切捨てタイプを指定します。すべてのフィールドに指定されるtrim_spec
句は、個々のフィールドに対してtrim_spec
句を指定して上書きできます。構文の詳細は、「trim_spec」を参照してください。
ALL FIELDS OVERRIDE
ALL FIELDS OVERRIDE
句では、アクセス・ドライバに対し、すべてのフィールドが存在し、それらが外部表の列と同じ順序であることを示します。特殊な定義が含まれるフィールドを指定するだけで済みます。この句は、オプションのtrim_spec
句の後で、オプションのMISSING FIELD VALUES ARE NULL
句の前に指定する必要があります。
次に、ALL
FIELDS
OVERRIDE
句の使用例を示します。指定する必要のあるフィールドはHIREDATEのみで、これは日付書式マスクを必要とします。他のすべてのフィールドはデフォルト値を使用します。
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LDRTRIM ALL FIELDS OVERRIDE REJECT ROWS WITH ALL NULL FIELDS ( HIREDATE CHAR(20) DATE_FORMAT DATE MASK "DD-Month-YYYY" )
MISSING FIELD VALUES ARE NULL
MISSING FIELD VALUES ARE NULL
は、位置が明示的に示されておらず、入力するのに十分なデータがないフィールドをNULLに設定します。詳細は、「MISSING FIELD VALUES ARE NULL」を参照してください。
REJECT ROWS WITH ALL NULL FIELDS
REJECT ROWS WITH ALL NULL FIELDS
は、行内で参照されるすべてのフィールドがNULLの場合、その行が外部表にロードされないことを示します。このパラメータを指定しない場合、デフォルト値が使用され、すべてのフィールドがNULLの行が外部表にロードされます。このパラメータの設定は、「reject rows with all null fields」または「rows with all null fields are accepted」としてログ・ファイルに書き込まれます。
DATE_FORMAT
DATE_FORMAT
句では、フィールド・レベルで日時書式マスクを一度指定することで、指定された独自のマスクのないそのタイプのすべてのフィールドにそれを適用できます。日時書式マスクは、オプションのREJECT ROWS WITH ALL NULL FIELDS
句の後で、fields_list
句の前に指定する必要があります。
DATE_FORMAT
は、日時データ型のDATE
、TIME
、TIME
WITH
TIME
ZONE
、TIMESTAMP
およびTIMESTAMP
WITH
TIME
ZONE
で指定できます。
次に、任意のDATE
型フィールドにDD-Month-YYYY
の日付マスクを適用するDATE_FORMAT
句の使用例を示します。
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LDRTRIM REJECT ROWS WITH ALL NULL FIELDS DATE_FORMAT DATE MASK "DD-Month-YYYY" ( EMPNO, ENAME, JOB, MGR, HIREDATE CHAR(20), SAL, COMM, DEPTNO, PROJNO, ENTRYDATE CHAR(20) )
NULLIF | NO NULLIF
NULLIF
句は、すべての文字フィールド(CHAR
、VARCHAR
、VARCHARC
、外部NUMBER
、日時など)に適用されます。
構文は次のとおりです。
NULLIF {=|!=}{"char_string"|x'hex_string'|BLANKS}
フィールドに対する等号または不等号の指定を使用して一致した場合、フィールドはその行でNULL
に設定されます。
char_string
およびhex_string
は、一重引用符または二重引用符で囲む必要があります。
NULLIF
は、フィールド・レベルで指定されると、このNULLIF
句に優先します。
NULLIF句を適用しないフィールドがある場合、フィールド・レベルでNO
NULLIF
を指定できます(次の例を参照)。
NULLIF
句は、オプションのREJECT ROWS WITH ALL NULL FIELDS
句の後で、fields_list
句の前に指定する必要があります。
次に、NULLIF
句の使用例を示します。MGR
フィールドは、NULLIF="NONE"
句をそのフィールドに適用しないようにするNO
NULLIF
に設定されます。
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LDRTRIM REJECT ROWS WITH ALL NULL FIELDS NULLIF = "NONE" ( EMPNO, ENAME, JOB, MGR )
field_list句
field_list
句を使用して、データ・ファイルのフィールドおよびそのデータ型を識別します。構文の詳細は、「field_list」を参照してください。
- delim_spec
delim_spec
句を使用して、フィールドの終了位置(ENCLOSED BY
を指定する場合は、開始位置)を検索します。 - trim_spec
trim_spec
句を使用して、空白をテキスト・フィールドの始めから切り捨てるか、終わりから切り捨てるか、またはその両方から切り捨てるかを指定します。 - MISSING FIELD VALUES ARE NULL
MISSING FIELD VALUES ARE NULL
の影響は、フィールド位置を明示的に示すためにPOSITION
が使用されているかどうかによって異なります。 - field_list
field_definitions
field_list
句は、データ・ファイル内のフィールドとそのデータ型を識別します。 - pos_spec句
ORACLE_LOADER
pos_spec
句を使用して、レコード内の列の位置を指定します。 - datatype_spec句
ORACLE_LOADER
datatype_spec
句は、データ型がデフォルトと異なる場合にデータ・ファイルのフィールドのデータ型を記述します。 - init_spec句
外部表にinit_spec
句を使用して、フィールドをNULL
またはデフォルト値に設定するタイミングを指定します。 - LLS句
親トピック: ORACLE_LOADERアクセス・ドライバ
15.4.1 delim_spec
delim_spec
句を使用して、フィールドの終了位置(ENCLOSED BY
を指定する場合は、開始位置)を検索します。
使用上のノート
ENCLOSED BY
を指定すると、ORACLE_LOADER
アクセス・ドライバで、レコードの現在の位置から最初のデリミタまでの間のすべての空白がスキップされます。現在の位置と最初のデリミタの間のすべての空白が無視されます。次に、アクセス・ドライバでは、2番目の囲みデリミタが検索されます(または、2番目のデリミタが指定されていない場合は、最初のデリミタがもう1度検索されます)。これら2つのデリミタの間にあるすべての文字がフィールド部分とみなされます。
TERMINATED BY string
をENCLOSED BY
句で指定する場合、終了記号文字列は、2番目の囲みデリミタの直後に置く必要があります。2番目の囲みデリミタと終了デリミタの間の空白はスキップされます。2つのデリミタの間で空白以外の文字が検索される場合、正しく書式設定されていないため行が拒否されます。
ENCLOSED BY
句を使用せずにTERMINATED BY
を指定する場合、レコードの現在の位置と次に検索される終了記号文字列の間にあるすべての文字がフィールド部分とみなされます。
OPTIONALLY
を指定する場合は、TERMINATED BY
も指定する必要があります。OPTIONALLY
パラメータによって、ENCLOSED BY
デリミタは、両方存在するかまたは両方存在しないかのいずれかであることが示されます。終了デリミタは、ENCLOSED BY
デリミタの有無にかかわらず存在する必要があります。OPTIONALLY
を指定する場合、アクセス・ドライバは、最初の空白以外の文字までのすべての空白をスキップします。最初の空白以外の文字が検索されると、アクセス・ドライバは、現在の位置に最初の囲みデリミタが含まれているかどうかを確認します。含まれている場合は、アクセス・ドライバによって2番目の囲み文字列が検索されます。最初の囲みデリミタと2番目の囲みデリミタの間のすべてが、フィールドの一部とみなされます。終了デリミタは、2番目の囲みデリミタの直後に置く必要があります(2番目の囲みデリミタと終了デリミタの間にオプションで空白を置くことも可能)。最初の空白以外の文字が最初の囲み文字列ではない場合、アクセス・ドライバは終了デリミタを検索します。この場合、先頭の空白は切り捨てられます。
デリミタが検出された後、レコードの現在の位置は、フィールドの最後のデリミタの後に設定されます。TERMINATED BY WHITESPACE
を指定した場合、レコードの現在の位置は、フィールドの後に続くすべての空白の後に設定されます。
アクセス・ドライバのデフォルトの切捨て動作の詳細は、「空白の切捨て」を参照してください。LTRIM
およびRTRIM
を使用すると、この動作をオーバーライドできます。
レコードの最後のフィールドで終了記号が欠落している場合は、エラーではありません。アクセス・ドライバは、終了記号が検出された場合と同様に処理を行います。2番目の囲みデリミタが欠落している場合は、エラーとなります。
2番目の囲みに使用される文字列は、2番目の囲みを2回続けることによって、データ・フィールドに含むことができます。たとえば、フィールドが一重引用符で囲まれる場合、次の例のdon'tという単語で示すような方法で一重引用符を2つ並べて指定することによって、フィールドに一重引用符を含むことができます。
'I don''t like green eggs and ham'
囲みデリミタを使用せずに、データ・フィールドの終了文字列を引用符で囲む方法はありません。フィールドに終了デリミタを含むことができるのは、フィールド・パーサーが囲みデリミタを検出するまで終了デリミタを検索しないためです。
通常、1文字の文字列は、複数文字の文字列より速く指定できます。また、固定幅文字セットのデータは、可変幅の文字セットよりも速く検索できます。
ノート:
外部表では、文字列内のバックスラッシュ(\
)の使用はサポートされていません。
- 例: 終了デリミタを含む外部表
終了デリミタを使用する外部表、および終了デリミタがあるデータ・ファイルを作成する方法を説明します。 - 例: 囲みデリミタおよび終了デリミタを含む外部表
囲みデリミタと終了デリミタを両方とも使用する外部表の作成方法を説明します。 - 例: オプションの囲みデリミタを含む外部表
オプションの囲みデリミタを使用する外部表の作成方法を説明します。
関連トピック
親トピック: field_definitions句
15.4.1.1 例: 終了デリミタを含む外部表
終了デリミタを使用する外部表、および終了デリミタがあるデータ・ファイルを作成する方法を説明します。
この表は、終了デリミタを使用するように作成されます。その後に、その表のロードに使用できるデータ・ファイルの例が示されます。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS PARAMETERS (FIELDS TERMINATED BY WHITESPACE) LOCATION ('info.dat')); Alvin Tolliver 1976 Kenneth Baer 1963 Mary Dube 1973
親トピック: delim_spec
15.4.1.2 例: 囲みデリミタおよび終了デリミタを含む外部表
囲みデリミタと終了デリミタを両方とも使用する外部表の作成方法を説明します。
次に、囲みデリミタと終了デリミタの両方を使用する外部表の例を示します。2番目の囲みデリミタと終了記号の間のすべての空白が無視されるのと同様に、終了文字列と最初の囲み文字列の間のすべての空白も無視されます。この例の後に、ロードが可能なデータ・ファイルのサンプルを示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS PARAMETERS (FIELDS TERMINATED BY "," ENCLOSED BY "(" AND ")") LOCATION ('info.dat')); (Alvin) , (Tolliver),(1976) (Kenneth), (Baer) ,(1963) (Mary),(Dube) , (1973)
親トピック: delim_spec
15.4.1.3 例: オプションの囲みデリミタを含む外部表
オプションの囲みデリミタを使用する外部表の作成方法を説明します。
この表は、オプションの囲みデリミタを使用するように作成される外部表です。フィールドの先頭および後続の空白を切り捨てるために、LRTRIM
を使用していることに注意してください。この例の後に、その表のロードに使用できるデータ・ファイルの例が示されます。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4)) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS PARAMETERS (FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '(' and ')' LRTRIM) LOCATION ('info.dat')); Alvin , Tolliver , 1976 (Kenneth), (Baer), (1963) ( Mary ), Dube , (1973)
親トピック: delim_spec
15.4.2 trim_spec
trim_spec
句を使用して、空白をテキスト・フィールドの始めから切り捨てるか、終わりから切り捨てるか、またはその両方から切り捨てるかを指定します。
説明
テキスト・フィールドの先頭またはテキスト・フィールドの末尾、あるいはその両方の空白を切り捨てるように、ORACLE_LOADER
アクセス・ドライバに指示します。空白には、空白文字およびその他の印字されない文字(タブ、行送り、改行など)が含まれます。
デフォルト
デフォルトは、LDRTRIM
です。NOTRIM
を指定すると、パフォーマンスが向上します。
オプション
NOTRIM
は、フィールドから文字を切り捨てないように指定します。LRTRIM
は、先頭と末尾のどちらの空白も切り捨てるように指定します。LTRIM
は、先頭の空白を切り捨てるように指定します。RTRIM
は、末尾の空白を切り捨てるように指定します。LDRTRIM
は、SQL*Loaderの切捨て機能との互換性を提供します。次の場合を除いて、NOTRIM
と同様です。- フィールドがデリミタ付きのフィールドではない場合、空白は右から切り捨てられる。
- フィールドが
OPTIONALLY ENCLOSED BY
で指定されたデリミタ付きフィールドで、オプションの囲みが特定のインスタンスで欠落している場合、空白は左から切り捨てられます。
使用上のノート
trim_spec
句をフィールド・リストの前に指定して、デフォルトの切捨てをすべてのフィールドに設定できます。trim_spec
がフィールド・リストの前で指定されない場合、LDRTRIM
が、デフォルトの切捨て設定となります。デフォルトの切捨ては、個々のフィールドに対してdatatype_spec
の一部として上書きできます。
すべてが空白のフィールドに対して切捨てを指定する場合、そのフィールドはNULL
に設定されます。
次の例では、すべてのデータが固定長です。ただし、先頭に空白がある文字データはロードできません。この例の後に、ロードが可能なデータ・ファイルのサンプルを示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20),
year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (FIELDS LTRIM)
LOCATION ('info.dat'));
Alvin, Tolliver,1976
Kenneth, Baer, 1963
Mary, Dube, 1973
親トピック: field_definitions句
15.4.3 MISSINGFIELDVALUESARENULL
MISSING FIELD VALUES ARE NULL
の影響は、フィールド位置を明示的に示すためにPOSITION
が使用されているかどうかによって異なります。
たとえば:
-
デフォルトの動作では、フィールド位置が明示的に示されておらず、レコードのすべてのフィールドに十分なデータがない場合、レコードは拒否されます。この動作を変更するには、
MISSING FIELD VALUES ARE NULL
を使用して、使用可能なデータがないフィールドをNULLとして定義します。 -
フィールド位置が明示的に示されている場合、
MISSING FIELD VALUES ARE NULL
が使用されているかどうかにかかわらず、常に、値のないフィールドはNULLとして定義されます。
次の例で、2番目のレコードは、生まれた年のデータがデータ・ファイルから欠落していても、year_of_birth
列に対しNULL
に設定されて格納されます。MISSING FIELD VALUES ARE NULL
句をアクセス・パラメータで指定しない場合、year_of_birth
列の値が含まれていない2番目のレコードが拒否されます。この例の後に、ロードが可能なデータ・ファイルのサンプルを示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth INT)
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (FIELDS TERMINATED BY ","
MISSING FIELD VALUES ARE NULL)
LOCATION ('info.dat'));
Alvin,Tolliver,1976
Baer,Kenneth
Mary,Dube,1973
親トピック: field_definitions句
15.4.4 field_list
field_definitions
field_list
句を使用して、データ・ファイルのフィールドおよびそのデータ型を識別します。
構文
field_list
句の構文は次のとおりです。
field list
句は、次のとおりです。
-
field_name: データファイルのフィールドの名前を識別する文字列です。文字列が引用符内にない場合、フィールド名は外部表の列名に一致され、大文字になります。
field_name
が問合せで参照される外部表の列名と一致する場合は、このフィールド値が外部表列の値に使用されます。名前が外部表で参照されたいずれの名前にも一致しない場合、フィールドはロードされません。ただし、このフィールドは句の評価(たとえば、WHEN
またはNULLIF
)には使用できます。 - pos_spec: レコード内の列の位置を示します。構文の詳細は、「pos_spec句」を参照してください。
- datatype_spec: フィールドのデータ型を示します。
datatype_spec
が指定されない場合、アクセス・ドライバは、データ型はCHAR(255)
であると想定します。構文の詳細は、「datatype_spec句」を参照してください。 - init_spec: フィールドが
NULL
であるか、デフォルト値を持っているかを示します。構文の詳細は、「init_spec句」を参照してください。 - LLS: フィールドに
LLS
を指定した場合、ORACLE_LOADER
はフィールドの値を対応する列にロードしません。かわりに、値の情報を使用して、フィールドの値を見つける場所を判別します。「LLS句」を参照してください。
用途
field_list
句を使用して、データ・ファイルのフィールドおよびそのデータ型を識別します。field_list
句では、次のように評価します。
-
フィールドにいずれのデータ型も指定されない場合、データ型は、デリミタなしフィールドでは
CHAR(1)
、デリミタ付きフィールドではCHAR(255)
である。 -
いずれのフィールド・リストも指定されない場合、データ・ファイルのフィールドは外部表と同じ順序である。データベースの列が
CHAR
またはVARCHAR
ではない場合、すべてのフィールドのデータ型は、CHAR(255)
となる。データベースの列がCHAR
またはVARCHAR
の場合、フィールドのデータ型はCHAR
のままであるが、その長さは255か列の長さでいずれか長い方の値となる。 -
いずれのフィールド・リストも指定されず、
delim_spec
句も指定されない場合、データ・ファイルのフィールドは外部表のフィールドと同じ順序である。すべてのフィールドは、CHAR(255)
であり、カンマで終了する。
例
次の例では、field_list
およびdelim_spec
を含まない外部表の定義を示します。その後に、ロードが可能なデータ・ファイルのサンプルを示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth INT) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS PARAMETERS (FIELDS TERMINATED BY "|") LOCATION ('info.dat')); Alvin|Tolliver|1976 Kenneth|Baer|1963 Mary|Dube|1973
親トピック: field_definitions句
15.4.5 pos_spec句
ORACLE_LOADER
pos_spec
句を使用して、レコード内の列の位置を指定します。
STRING SIZES ARE IN
句を設定して、pos_spec
がバイト位置と文字位置のどちらを参照するかを決定します。可変幅文字セットで文字位置を使用すると、固定幅文字セットで文字位置を使用するより大幅に時間がかかります。pos_spec
が文字位置に使用されると、バイナリ文字データとマルチバイト文字データは、同じデータ・ファイルには指定できません。指定した場合の結果は保証されません。
- pos_spec句の構文
ORACLE_LOADER
pos_spec
句の構文は次のとおりです。 - start
pos_spec
句のstart
パラメータは、レコードの開始位置からフィールドの開始位置までのバイト数を示します。 - *
pos_spec
句の*
パラメータは、フィールドが前のフィールドの直後のバイトから始まることを示します。 - increment
pos_spec
句のincrement
パラメータは、フィールドの開始位置を前のフィールドの終了位置からの固定バイト数で設定します。 - end
pos_spec
句のend
パラメータは、フィールドの最終バイトをレコード内の絶対バイト・オフセットで示します。 - length
pos_spec
句のlength
パラメータは、フィールドの終了位置を開始位置からの固定バイト数で示します。
親トピック: field_definitions句
15.4.5.2 start
pos_spec
句のstart
パラメータは、レコードの開始位置からフィールドの開始位置までのバイト数を示します。
start
パラメータを使用すると、前のフィールドの位置からの相対ではなく、レコードの絶対位置でフィールドの開始位置を設定できます。
親トピック: pos_spec句
15.4.5.3 *
pos_spec
句の*
パラメータは、フィールドが前のフィールドの直後のバイトから始まることを示します。
*
パラメータは、ORACLE_LOADER
で可変長フィールドの後に固定長フィールドが続く場合に役立ちます。このオプションは、レコードの最初のフィールドには使用できません。
親トピック: pos_spec句
15.4.5.4 increment
pos_spec
句のincrement
パラメータは、フィールドの開始位置を前のフィールドの終了位置からの固定バイト数で設定します。
increment
パラメータは、フィールドの開始位置を前のフィールドの終了位置からの固定バイト数で設定します。*-increment
を使用して、フィールドの開始位置をレコードの現在の位置の前に指定します。現在の位置の後に開始を移動するには、*+increment
を使用します
親トピック: pos_spec句
15.4.5.5 end
pos_spec
句のend
パラメータは、フィールドの最終バイトをレコード内の絶対バイト・オフセットで示します。
end
パラメータは、フィールドの最終バイトのレコード内での絶対バイト・オフセットを設定するために使用します。start
をend
とともに指定する場合、end
は、start
より小さくできません。*
またはincrement
をend
とともに指定し、start
が特定のレコードのend
より大きいオフセットと評価された場合、レコードは拒否されます。
親トピック: pos_spec句
15.4.5.6 length
pos_spec
句のlength
パラメータは、フィールドの終了位置を開始位置からの固定バイト数で示します。
length
パラメータは、開始が*
で指定されているときに、固定長フィールドを設定する場合に使用します。次に、pos_spec
の使用例を示します。その後で、ロードに使用できるデータ・ファイルのサンプルを示します。
CREATE TABLE emp_load (first_name CHAR(15),
last_name CHAR(20),
year_of_birth INT,
phone CHAR(12),
area_code CHAR(3),
exchange CHAR(3),
extension CHAR(4))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS
(RECORDS CHARACTERSET we8iso8859p1
FIELDS RTRIM
(first_name (1:15) CHAR(15),
last_name (*:+20),
year_of_birth (36:39),
phone (40:52),
area_code (*-12: +3),
exchange (*+1: +3),
extension (*+1: +4)))
LOCATION ('info.dat'));
Alvin Tolliver 1976415-922-1982
Kenneth Baer 1963212-341-7912
Mary Dube 1973309-672-2341
この例では、宣言されたRECORDS CHARACTERSET
we8iso8859p1
はマルチバイト文字セットではありません。すべての文字が1バイトで表されることが保証されています。データ・フィールドの開始位置と終了位置(*
演算子および+
演算子を含む)を決定するためのPOSITION
句の計算は、文字ではなくバイトに基づきます(つまり、Oracle文字セットWE8ISO8859P1
のように、文字を表すには1バイトのみが必要です)。可変長文字セット(Unicodeバリアント、JIS X 0208-1990
、またはフィールド・データに1つ以上のマルチバイト文字が含まれているその他のマルチバイト文字セットなど)を使用すると、計算は不正確になります。
親トピック: pos_spec句
15.4.6 datatype_spec句
ORACLE_LOADER
datatype_spec
句は、データ型がデフォルトと異なる場合にデータ・ファイルのフィールドのデータ型を記述します。
フィールドのデータ型は、外部表の対応する列のデータ型とは異なる場合があります。アクセス・ドライバで必要な変更が行われます。
- datatype_spec句の構文
ORACLE_LOADER
datatype_spec
句の構文は次のとおりです。 - [UNSIGNED] INTEGER [EXTERNAL] [(len)]
datatype_spec
句[UNSIGNED] INTEGER [EXTERNAL] [(len)]
では、フィールドが整数として定義されます。 - DECIMAL [EXTERNAL]およびZONED [EXTERNAL]
DECIMAL
句を使用して、フィールドがPACKED型の10進数であることを指定します。ZONED
句を使用して、フィールドがZONED型の10進数であることを指定します。 - ORACLE_DATE
ORACLE_DATE
は、Oracleバイナリ日付形式の日付を格納しているフィールドです。 - ORACLE_NUMBER
ORACLE_NUMBER
は、Oracle数値形式の数値格納しているフィールドです。 - 浮動小数点数
DOUBLE
、FLOAT
、BINARY_DOUBLE
およびBINARY_FLOAT
の4つのデータ型は、浮動小数点数です。 - DOUBLE
DOUBLE
句では、フィールドがアクセス・ドライバを実行しているプラットフォームのC言語のDOUBLE
データ型と同じ形式であることを指定します。 - FLOAT [EXTERNAL]
FLOAT
句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のFLOAT
データ型と同じ形式であることを指定します。 - BINARY_DOUBLE
datatype_spec
句の値BINARY_DOUBLE
は、64ビットの倍精度浮動小数点数データ型です。 - BINARY_FLOAT
datatype_spec
句の値BINARY_FLOAT
は、32ビットの単精度浮動小数点数データ型です。 - RAW
RAW
句では、ソース・データがバイナリ・データであることを示します。 - CHAR
datatype_spec句のデータ型CHAR
句を使用して、フィールドが文字データ型であることを示します。 - date_format_spec
date_format_spec
句を使用して、特定の形式の日付データまたは時刻データ(またはその両方)が文字列フィールドに含まれることを指定します。 - VARCHARおよびVARRAW
datatype_spec
句のVARCHAR
データ型は文字データを定義し、VARRAW
データ型はバイナリ・データを定義します。 - VARCHARCおよびVARRAWC
datatype_spec句のVARCHARCデータ型は文字データを定義し、VARRAWCデータ型ではバイナリ・データを定義します。
親トピック: field_definitions句
15.4.6.1 datatype_spec句の構文
ORACLE_LOADER
datatype_spec
句の構文は次のとおりです。
フィールドのバイト数または文字数が0の場合、フィールドはNULL
であると想定されます。オプションのDEFAULTIF
句を使用して、フィールドをデフォルトの値に設定するタイミングを指定します。また、オプションのNULLIF
句で、フィールドに対応付けられた列をNULL
に設定するタイミングに関するその他の条件を指定します。DEFAULTIF
句またはNULLIF
句がTRUE
の場合、これらの句を使用すると、データ・ファイルから読み込まれるすべての値が上書きされます。
親トピック: datatype_spec句
15.4.6.2 [UNSIGNED] INTEGER [EXTERNAL] [(len)]
datatype_spec
句[UNSIGNED] INTEGER [EXTERNAL] [(len)]
では、フィールドが整数として定義されます。
この句を使用して、フィールドを整数として定義します。EXTERNAL
を指定する場合、数値は文字列で指定します。EXTERNAL
を指定しない場合、数値はバイナリ・フィールドです。2進整数フィールドのlen
に対する有効な値は、1、2、4および8です。len
が2進整数で指定されていない場合、デフォルトの値は、アクセス・ドライバが実行されているプラットフォーム上のsizeof(int)
の値です。DATA IS {BIG|LITTLE} ENDIAN
句を使用すると、データは格納される前にバイト・スワップされます。
EXTERNAL
を指定する場合、len
の値は、(STRING SIZES ARE IN BYTES
句またはCHARACTERS
句の設定に応じて)バイト数または文字数を数値で指定します。長さを指定しない場合、デフォルト値は255になります。
[UNSIGNED] INTEGER [EXTERNAL] [(len)]
データ型のデフォルト値は、次のように決定されます。
-
長さを指定しない場合、デフォルトの長さは1になります。
-
長さを指定せず、フィールドが
DELIMITED BY NEWLINE
句で区切られている場合、デフォルトの長さは1になります。 -
長さを指定せず、フィールドが
DELIMITED BY
句で区切られている場合、デフォルトの長さは255になります(ただし、前述のとおりデリミタがNEWLINE
でない場合)。
親トピック: datatype_spec句
15.4.6.3 DECIMAL [EXTERNAL]およびZONED [EXTERNAL]
DECIMAL
句を使用して、フィールドがPACKED型の10進数であることを指定します。ZONED
句を使用して、フィールドがZONED型の10進数であることを指定します。
precision
フィールドで、数値の桁数を指定します。scale
フィールドで、数値の小数点の位置を指定します。つまり、小数点の右側にくる桁数を指定します。scale
を指定しない場合、値は0となります。
使用中の文字セットがEBCDICベースかASCIIベースかによって、ZONED型の10進数には異なるエンコーディング形式があることに注意してください。ソース・データの言語がEBCDICの場合、そのファイルのZONED型の10進数は、EBCDICエンコーディングと一致する必要があります。言語がASCIIベースの場合、その数値はASCIIエンコーディングと一致する必要があります。
EXTERNAL
パラメータを指定する場合、データ・フィールドは、その長さがフィールドの精度と一致する文字列です。
親トピック: datatype_spec句
15.4.6.4 ORACLE_DATE
ORACLE_DATE
は、Oracleバイナリ日付フォーマットの日付を含むフィールドであることを指定します。
これは、Oracle Call Interface (OCI)プログラムでは、DTYDAT
データ型として使用される形式です。固定長7のフィールドです。
親トピック: datatype_spec句
15.4.6.5 ORACLE_NUMBER
ORACLE_NUMBER
は、Oracle数値書式の数値を含むフィールドであることを指定します。
COUNTED
を指定しないかぎり、フィールドは固定長(Oracle数値フィールドの最大サイズ)です。その場合、フィールドの最初のバイトには残りのフィールドのバイト数が含まれます。
ORACLE_NUMBER
は、固定長22バイトのフィールドです。ORACLE_NUMBER COUNTED
フィールドの長さは、カウント・バイト用の1バイトに、カウント・バイトで指定されたバイト数を加えた長さです。
親トピック: datatype_spec句
15.4.6.6 浮動小数点数
DOUBLE
、FLOAT
、BINARY_DOUBLE
およびBINARY_FLOAT
のデータ型は、浮動小数点数です。
DOUBLE
、FLOAT
、BINARY_DOUBLE
およびBINARY_FLOAT
のデータ型は、浮動小数点数です。
DOUBLE
およびFLOAT
は、プラットフォームで固有に使用される浮動小数点形式です。これらは、そのプラットフォームのCプログラムのDOUBLE
およびFLOAT
データ型でデフォルトで使用されるものと同じデータ型です。BINARY_FLOAT
およびBINARY_DOUBLE
は浮動小数点数であり、実質的にInstitute for Electrical and Electronics Engineers (IEEE) Standard for Binary Floating-Point Arithmetic、IEEE規格754-1985に準拠しています。ほとんどのプラットフォームでは、固有の浮動小数点形式としてIEEE規格を使用しているため、FLOAT
とBINARY_FLOAT
は、プラットフォーム上では同様となります。また、DOUBLE
とBINARY_DOUBLE
も同様となります。
ノート:
浮動小数点数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。親トピック: datatype_spec句
15.4.6.7 DOUBLE
DOUBLE
句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のDOUBLE
データ型と同じ形式であることを指定します。
DATA IS {BIG | LITTLE} ENDIAN
句を使用すると、データは格納される前にバイト・スワップされます。このデータ型は特定のプラットフォーム間では移植できません。
親トピック: datatype_spec句
15.4.6.8 FLOAT [EXTERNAL]
FLOAT
句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のFLOAT
データ型と同じ形式であることを指定します。
FLOAT
句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のFLOAT
データ型と同じ形式であることを指定します。DATA IS {BIG | LITTLE} ENDIAN
句を使用すると、データは格納される前にバイト・スワップされます。このデータ型は特定のプラットフォーム間では移植できません。
EXTERNAL
パラメータを指定する場合、フィールドは、最大長255の文字列です。
親トピック: datatype_spec句
15.4.6.9 BINARY_DOUBLE
datatype_spec
句の値BINARY_DOUBLE
は、64ビットの倍精度浮動小数点数データ型です。
各BINARY_DOUBLE
値では、長さを示すバイトを含め9バイトを必要とします。浮動小数点数の詳細は、FLOAT
データ型のノートに関する情報を参照してください。
親トピック: datatype_spec句
15.4.6.10 BINARY_FLOAT
datatype_spec
句の値BINARY_FLOAT
は、32ビットの単精度浮動小数点数データ型です。
各BINARY_FLOAT
値では、長さを示すバイトを含め5バイトを必要とします。浮動小数点数の詳細は、FLOAT
データ型のノートに関する情報を参照してください。
親トピック: datatype_spec句
15.4.6.11 RAW
RAW
句を使用して、ソース・データがバイナリ・データであることを指定します。
RAW
フィールドに対するlen
は常にバイト単位です。RAW
フィールドがキャラクタ列にロードされると、列に書き込まれるデータは、RAW
フィールドのバイトの16進表現となります。
親トピック: datatype_spec句
15.4.6.12 CHAR
datatype_spec句のデータ型CHAR
句を使用して、フィールドが文字データ型であることを指定します。
CHAR
フィールドの長さ(len
)で、フィールドの最大バイト数または最大文字数を指定します。len
は、STRING SIZES ARE IN
句の設定に応じて、バイト単位または文字単位になります。
CHAR
データ型のフィールドに長さを指定しない場合、フィールドが区切られていないかぎり、フィールド・サイズは1になります。
-
デリミタ付き
CHAR
フィールドでは、長さが指定されている場合、その長さが最大長として使用されます。 -
長さが指定されていないデリミタ付き
CHAR
フィールドでは、デフォルトの255バイトが使用されます。 -
デリミタ付きで255バイトを超える
CHAR
フィールドには、最大長を指定する必要があります。指定しない場合は、データ・ファイルのフィールドが最大長を超えているというエラーを受信します。
次に、CHAR
句の使用例を示します。
SQL> CREATE TABLE emp_load
2 (employee_number CHAR(5),
3 employee_dob CHAR(20),
4 employee_last_name CHAR(20),
5 employee_first_name CHAR(15),
6 employee_middle_name CHAR(15),
7 employee_hire_date DATE)
8 ORGANIZATION EXTERNAL
9 (TYPE ORACLE_LOADER
10 DEFAULT DIRECTORY def_dir1
11 ACCESS PARAMETERS
12 (RECORDS DELIMITED BY NEWLINE
13 FIELDS (employee_number CHAR(2),
14 employee_dob CHAR(20),
15 employee_last_name CHAR(18),
16 employee_first_name CHAR(11),
17 employee_middle_name CHAR(11),
18 employee_hire_date CHAR(10) date_format DATE mask "mm/dd/yyyy"
19 )
20 )
21 LOCATION ('info.dat')
22 );
Table created.
親トピック: datatype_spec句
15.4.6.13 date_format_spec
date_format_spec
句を使用して、特定の形式の日付データまたは時刻データ(またはその両方)が文字列フィールドに含まれることを指定します。
この情報は、文字フィールドが日付データ型または時刻データ型に変換される場合、および文字列フィールドが日付列にマップされる場合のみに使用されます。
date_format_spec
句の構文は次のとおりです。
日付と時刻の書式を正しく指定する方法の詳細は、Oracle Database SQLリファレンスを参照してください。
- DATE
DATE
句では、文字列に日付が含まれることを示します。 - MASK
MASK
句は、データ型に対するデフォルトのグローバリゼーション形式のマスクをオーバーライドするために使用します。 - TIMESTAMP
TIMESTAMP
句では、フィールドに書式設定されたタイムスタンプが格納されていることを示します。 - INTERVAL
INTERVAL
句では、フィールドに書式設定された間隔が格納されていることを示します。
関連トピック
親トピック: datatype_spec句
15.4.6.13.2 MASK
MASK
句を使用して、データ型に対するデフォルトのグローバリゼーション書式マスクを上書きします。
日付マスクを指定しない場合は、データ型に対する適切なグローバリゼーション・パラメータのデータベースのNLSパラメータ設定(セッションの設定ではない)が使用されます。NLS_DATABASE_PARAMETERS
ビューに、これらの設定が表示されます。
-
NLS_DATE_FORMAT
(DATE
データ型) -
NLS_TIMESTAMP_FORMAT
(TIMESTAMP
データ型) -
NLS_TIMESTAMP_TZ_FORMAT
(TIMESTAMP WITH TIME ZONE
データ型)
次の点に注意してください。
-
NLS_NUMERIC_CHARACTERS
初期化パラメータのデータベース設定(NLS_DATABASE_PARAMETERS
ビューの設定)によって、文字データ型から数値データ型への暗黙的な変換に使用される小数点区切りが制御されます。 -
デフォルトの書式では、桁区切りは使用できません。
親トピック: date_format_spec
15.4.6.13.4 INTERVAL
INTERVAL
句を使用して、フィールドに書式設定された期間が含まれることを指定します。
INTERVAL
句を使用して、フィールドに書式設定された期間が含まれることを指定します。期間の型は、YEAR TO MONTH
またはDAY TO SECOND
のいずれかです。
次に、複雑なDATE
文字列とTIMESTAMP
文字列の使用例を示します。その後に、ロードが可能なデータ・ファイルのサンプルを示します。
SQL> CREATE TABLE emp_load
2 (employee_number CHAR(5),
3 employee_dob CHAR(20),
4 employee_last_name CHAR(20),
5 employee_first_name CHAR(15),
6 employee_middle_name CHAR(15),
7 employee_hire_date DATE,
8 rec_creation_date TIMESTAMP WITH TIME ZONE)
9 ORGANIZATION EXTERNAL
10 (TYPE ORACLE_LOADER
11 DEFAULT DIRECTORY def_dir1
12 ACCESS PARAMETERS
13 (RECORDS DELIMITED BY NEWLINE
14 FIELDS (employee_number CHAR(2),
15 employee_dob CHAR(20),
16 employee_last_name CHAR(18),
17 employee_first_name CHAR(11),
18 employee_middle_name CHAR(11),
19 employee_hire_date CHAR(22) date_format DATE mask "mm/dd/yyyy hh:mi:ss AM",
20 rec_creation_date CHAR(35) date_format TIMESTAMP WITH TIME ZONE mask "DD-MON-RR HH.MI.SSXFF AM TZH:TZM"
21 )
22 )
23 LOCATION ('infoc.dat')
24 );
Table created.
SQL> SELECT * FROM emp_load;
EMPLO EMPLOYEE_DOB EMPLOYEE_LAST_NAME EMPLOYEE_FIRST_ EMPLOYEE_MIDDLE
----- -------------------- -------------------- --------------- ---------------
EMPLOYEE_
---------
REC_CREATION_DATE
---------------------------------------------------------------------------
56 november, 15, 1980 baker mary alice
01-SEP-04
01-DEC-04 11.22.03.034567 AM -08:00
87 december, 20, 1970 roper lisa marie
01-JAN-02
01-DEC-02 02.03.00.678573 AM -08:00
2 rows selected.
info.dat
ファイルの内容は、次のようになります。これは、2つの長いレコードです。日付フィールド(09/01/2004
、01/01/2002
)とそれに続く時刻フィールドの間には、空白が1つあります。
56november, 15, 1980 baker mary alice 09/01/2004 08:23:01 AM01-DEC-04 11.22.03.034567 AM -08:00
87december, 20, 1970 roper lisa marie 01/01/2002 02:44:55 PM01-DEC-02 02.03.00.678573 AM -08:00
親トピック: date_format_spec
15.4.6.14 VARCHARおよびVARRAW
datatype_spec
句のVARCHAR
データ型は文字データを定義し、VARRAW
データ型はバイナリ・データを定義します。
VARCHAR
データ型には、文字データが後に続くバイナリ・カウント・フィールドが含まれます。バイナリ・カウント・フィールドの値は、フィールドのバイト数または文字数のいずれかです。数値が、文字数とバイト数のどちらで解釈されるかを指定する方法の詳細は、「STRING SIZES ARE IN」
を参照してください。
VARRAW
データ型には、バイナリ・データが後に続くバイナリ・カウント・フィールドが含まれます。バイナリ・カウント・フィールドの値は、バイナリ・データのバイト数です。VARRAW
フィールドのデータは、DATA IS...ENDIAN
句の影響を受けません。
ACCESS PARAMETERS
句の中のVARIABLE 2
句は、長さを含むバイナリ・フィールドのサイズを規定します。
オプションのlength_of_length
フィールドは、カウント・フィールドのバイト数です。VARCHAR
に対するlength_of_length
の有効な値は、1、2、4および8です。length_of_length
を指定しない場合、値に2が使用されます。カウント・フィールドは、DATA IS...ENDIAN
句で指定されたとおりの同じエンディアンを持ちます。
max_len
フィールドを使用して、データ・ファイルのフィールドのインスタンスの最大サイズを指定します。VARRAW
フィールドでは、max_len
はバイト数です。VARCHAR
フィールドでは、max_len
は、STRING SIZES ARE IN
句の設定に応じて、文字数またはバイト数のいずれかになります。
次に、VARCHAR
およびVARRAW
の使用例を示します。例の後に、データ・ファイルinfo.dat
の内容を示します。
CREATE TABLE emp_load
(first_name CHAR(15),
last_name CHAR(20),
resume CHAR(2000),
picture RAW(2000))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS
(RECORDS
VARIABLE 2
DATA IS BIG ENDIAN
CHARACTERSET US7ASCII
FIELDS (first_name VARCHAR(2,12),
last_name VARCHAR(2,20),
resume VARCHAR(4,10000),
picture VARRAW(4,100000)))
LOCATION ('info.dat'));
info.datデータ・ファイルの内容
この例で使用するデータ・ファイルの内容は次のとおりです。
0005Alvin0008Tolliver0000001DAlvin Tolliver's Resume etc. 0000001013f4690a30bc29d7e40023ab4599ffff
わかりやすくするため、カウント・バイトのバイナリ値およびRAWデータの値は、1バイナリ・バイトをイタリック体の2文字で表示していることに注意してください。実際のデータ・ファイルでは、ASCII形式ではなくバイナリ形式の値になります。したがって、この例をカット・アンド・ペーストで使用すると、エラーが返されます。
関連トピック
親トピック: datatype_spec句
15.4.6.15 VARCHARCおよびVARRAWC
datatype_spec句のVARCHARCデータ型は文字データを定義し、VARRAWCデータ型はバイナリ・データを定義します。
VARCHARC
データ型には、文字データが後に続く文字カウント・フィールドが含まれます。カウント・フィールドの値は、フィールドのバイト数または文字数のいずれかです。数値が、文字数とバイト数のどちらで解釈されるかを指定する方法の詳細は、STRING SIZES ARE IN
を参照してください。オプションのlength_of_length
は、長さが文字とバイトのどちらで解釈されるかに応じて、VARCHARC
に対するカウント・フィールドのバイト数または文字数のいずれかになります。
VARCHARC
に対する
の最大値は、文字列のサイズが文字単位の場合は10で、文字列のサイズがバイト単位の場合は20です。length_of_lengths
length_of_length
のデフォルトの値は5です。
VARRAWC
データ型には、バイナリ・データが後に続く文字カウント・フィールドが含まれます。カウント・フィールドの値は、バイナリ・データのバイト数です。length_of_length
は、カウント・フィールドのバイト数です。
max_len
フィールドを使用して、データ・ファイルのフィールドのインスタンスの最大サイズを指定します。VARRAWC
フィールドでは、max_len
はバイト数です。VARCHARC
フィールドでは、max_len
は、STRING
SIZES
ARE
IN
句の設定に応じて、文字数またはバイト数のいずれかになります。
次に、VARCHARC
およびVARRAWC
の使用例を示します。picture
フィールドの長さは0です。これは、このフィールドがNULL
に設定されていることを意味します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), resume CHAR(2000), picture RAW (2000)) ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir ACCESS PARAMETERS (FIELDS (first_name VARCHARC(5,12), last_name VARCHARC(2,20), resume VARCHARC(4,10000), picture VARRAWC(4,100000))) LOCATION ('info.dat')); 00007William05Ricca0035Resume for William Ricca is missing0000
関連トピック
親トピック: datatype_spec句
15.4.7 init_spec句
外部表にinit_spec
句を使用して、フィールドをNULL
またはデフォルト値に設定するタイミングを指定します。
init_spec
句の構文は次のとおりです。
NULLIF
句およびDEFAULTIF
句は、フィールドに各1回のみ指定できます。これらの句を使用して、次の処理を実行できます。
-
NULLIF condition_spec
を指定し、TRUE
と評価された場合、フィールドはNULL
に設定されます。 -
DEFAULTIF condition_spec
を指定し、TRUE
と評価された場合、フィールドの値はデフォルトの値に設定されます。デフォルトの値は、フィールドのデータ型によって次のように異なります。-
文字データ型の場合は、デフォルトの値は空の文字列
-
数値データ型の場合は、デフォルトの値は0
-
日付データ型の場合は、デフォルトの値は
NULL
-
-
NULLIF
句とDEFAULTIF
句の両方をフィールドに指定する場合、まずNULLIF
句が評価され、DEFAULTIF
句は、NULLIF
句がFALSE
と評価された場合のみに評価されます。
親トピック: field_definitions句
15.4.8 LLS句
データ・ファイルのフィールドがLOBロケーション指定子(LLS)フィールドの場合、LLS
句を使用してこのことを示すことができます。LLSフィールドには、ファイル名、データ・ファイル内のLOBデータのオフセットおよび長さが含まれます。SQL*Loaderでは、この情報を使用してLOB列のデータを読み取ります。ORACLE_LOADER
のLLS
句の構文は、次のとおりです。
LLS
句を使用した場合、ORACLE_LOADER
はフィールドの値を対応する列にロードしません。かわりに、値の情報を使用して、フィールドの値を見つける場所を判別します。LOBは一部または全体をロードでき、任意の位置から任意の長さで開始できます。ORACLE_LOADER
は、フィールドの内容がfilename.ext.nnn.mmm/
であることを要求します。各要素は次のように定義されます。
-
filename.ext
は、LOBを含むファイルの名前です。 -
nnn
は、ファイル内のLOBのバイト単位のオフセットです。 -
mmm
は、LOBの長さ(バイト)です。-1の値は、LOBがNULLであることを意味します。0の値は、LOBは存在するものの、空であることを示します。 -
スラッシュ(
/
)は、フィールドの終端となります。
LLS
句には、Oracleディレクトリ・オブジェクトを指定するオプションのDIRECTORY
句があります。
-
DIRECTORY
を指定した場合、ファイルがその場所に存在する必要があり、また、そのディレクトリ・オブジェクトへのREAD
アクセス権限が必要です。 -
DIRECTORY
を指定しない場合、ファイルがデータ・ファイルと同じディレクトリ内に存在する必要があります。
次のいずれかに該当する場合、エラーが返され、行は拒否されます。
-
ファイル名に相対パスまたは絶対パスの指定が含まれています。
-
ファイルが見つからない、オフセットが無効である、または長さがファイルの終わりを超えています。
-
フィールドの内容が予期した書式ではありません。
-
LLS
フィールドに関連付けられた列のデータ型がCLOB
、BLOB
、NCLOB
のいずれでもない場合。
LLS
フィールドが他のフィールドの句(NULLIF
句など)によって参照されている場合、アクセス・パラメータ内で、その句の評価に使用される値はデータ・ファイル内の文字列であり、その文字列により示されるファイル内のデータではありません。
LLS
句で示されるファイルのデータの文字セットは、データ・ファイルと同じ文字セットとみなされます。
親トピック: field_definitions句
15.5 column_transforms句
オプションのORACLE_LOADER
アクセス・ドライバCOLUMN TRANSFORMS
句を使用した変換では、データ・ファイル内の列に直接マップされない外部表内の列をロードする方法を指定できます。
構文
column_transforms
句の構文は次のようになります。
ノート:
COLUMN TRANSFORMS
句とPREPROCESSOR
句を同時に使用することはできません。
- transform
transform
句で指定した各変換では、外部表の列を特定してから列の値の計算方法を指定します。
親トピック: ORACLE_LOADERアクセス・ドライバ
15.5.1 transform
transform
句で指定された各変換では、外部表の列を識別し、次に列の値の計算方法を指定します。
構文は次のとおりです。
NULL
変換は、外部表の列を各行でNULL
に設定します。CONSTANT
変換は、外部表の列をすべての行で同じ値に設定するために使用されます。CONCAT
変換は、外部表の列をデータ・ファイルからの現在のレコード内の定数文字列またはフィールド(あるいはその両方)の連結に設定するために使用されます。LOBFILE
変換は、別のデータ・ファイルからのレコードのフィールドにデータをロードするために使用されます。これらの各変換については、次の項で詳しく説明します。
- column_name FROM
column_name
により、ロードする外部表内の列を一意に特定します。 - NULL
NULL
変換が指定されていると、すべてのレコードでフィールドのすべての値がNULL
に設定されます。 - CONSTANT
CONSTANT
句変換では、レコード内の列の値として指定された文字列の値が使用されます。 - CONCAT
CONCAT
変換は、データ・ファイル内の定数文字列とフィールドを連結して1つの文字列にします。 - LOBFILE
LOBFILE
変換は、外部表の列の値として使用する内容が含まれているファイルを特定するために使用します。 - lobfile_attr_list
lobfile_attr_list
は、LOBFILEの追加属性をリストします。 - STARTOF source_field (長さ)
STARTOF
キーワードを使用すると、列がソース・フィールドのデータの部分文字列になることが可能な外部表を作成できます。
親トピック: column_transforms句
15.5.1.1 column_name FROM
column_name
により、ロードする外部表内の列を一意に特定します。
transform
句で列名が参照される場合、その名前は、データ・ファイルのフィールドとしてFIELDS
句で指定することはできません。
親トピック: transform
15.5.1.3 CONSTANT
CONSTANT
句変換では、レコード内の列の値として指定された文字列の値が使用されます。
外部表の列が文字列型でない場合、定数文字列は列のデータ型に変換されます。この変換は各行に対して行われます。
データ型変換で使用される文字列の文字セットは、データベースの文字セットです。
親トピック: transform
15.5.1.4 CONCAT
CONCAT
変換は、データ・ファイルの定数文字列とフィールドを連結して1つの文字列にします。
連結の一部として使用できるフィールドは、文字データ型でfields
句にリストされているフィールドのみです。他の列変換は、連結の一部として指定できません。
親トピック: transform
15.5.1.5 LOBFILE
LOBFILE
変換は、外部表の列の値として内容を使用するファイルを識別します。
すべてのLOBFILEは、directory object:filename
形式のオプションのディレクトリ・オブジェクトおよびファイル名で識別されます。LOBFILE
変換には次の規則が適用されます。
-
ディレクトリ・オブジェクトおよびファイル名は、定数文字列またはフィールド句のフィールド名のいずれかです。
-
定数文字列を指定すると、その文字列を使用して表の各行の
LOBFILE
が検索されます。 -
フィールド名を指定すると、データ・ファイル内のそのフィールドの値を使用して
LOBFILE
が検索されます。 -
ディレクトリ・オブジェクトまたはファイル名のどちらかに対してフィールド名が指定されていて、そのフィールドの値が
NULL
の場合は、LOBFILE
によってロードされる列もNULL
に設定されます。 -
ディレクトリ・オブジェクトが指定されない場合、外部表に対して指定されたデフォルトのディレクトリが使用されます。
-
ディレクトリ・オブジェクトに対してフィールド名が指定された場合、
FROM
句も指定する必要があります。
ファイル全体がLOB列の値として使用されます。複数の行で同じファイルが参照されると、各列を移入するためにファイルが再びオープンし、再び読み込まれます。
親トピック: transform
15.5.1.6 lobfile_attr_list
lobfile_attr_list
は、LOBFILEの追加属性をリストします。
構文は次のとおりです。
FROM
句は、LOBFILEで使用されるすべてのディレクトリ・オブジェクトの名前をリストします。LOBFILE
の名前のディレクトリ・オブジェクトに対して、フィールド名が指定された場合にのみ使用します。FROM
句の目的は、初期化時に名前付きのディレクトリ・オブジェクトに許可されたアクセス権の種類を識別することにあります。フィールドの値に指定されたディレクトリ・オブジェクトが、リスト内のディレクトリ・オブジェクトではない場合、行は拒否されます。
CLOB
属性は、LOBFILE
内のデータが文字データであること(RAW
データではないこと)を示します。場合によって文字データは、データベース内にLOBを格納するために使用される文字セットに変換する必要があります。
CHARACTERSET
属性には、LOBFILE
内のデータの文字セット名が格納されます。
BLOB
属性は、LOBFILE
内のデータが生データであることを示します。
CLOB
またはBLOB
のいずれも指定されない場合、CLOB
であるとみなされます。文字LOBFILEに対して文字セットが指定されない場合、データ・ファイルの文字セットであるとみなされます。
親トピック: transform
15.5.1.7 STARTOF source_field (長さ)
STARTOF
キーワードを使用すると、列がソース・フィールドのデータの部分文字列になることが可能な外部表を作成できます。
長さは、部分文字列の先頭からの長さです。長さとはバイト数のことであり、変換される外部表の列は文字長セマンティクスではなく、バイト長セマンティクスを使用するとみなされます。(文字長セマンティクスを使用すると、予期しない結果になる可能性があります。)
完全な文字コードのみが移動され、文字は分割されません。したがって、部分文字列がマルチバイト文字の途中で終わると、結果の文字列は短くなります。たとえば、長さに10を指定し、10番目のバイトがマルチバイト文字の最初のバイトである場合、最初の9バイトのみが返されます。
次の例では、部署名(dname
)フィールドの最初の4バイトのみが必要となる場合の、STARTOF
キーワードの使用方法を示しています。
SQL> CREATE TABLE dept (deptno NUMBER(2),
2 dname VARCHAR2(14),
3 loc VARCHAR2(13)
4 )
5 ORGANIZATION EXTERNAL
6 (
7 DEFAULT DIRECTORY def_dir1
8 ACCESS PARAMETERS
9 (
10 RECORDS DELIMITED BY NEWLINE
11 FIELDS TERMINATED BY ','
12 (
13 deptno CHAR(2),
14 dname_source CHAR(14),
15 loc CHAR(13)
16 )
17 column transforms
18 (
19 dname FROM STARTOF dname_source (4)
20 )
21 )
22 LOCATION ('dept.dat')
23 );
Table created.
dept
表からSELECT
操作を実行する場合、dname
フィールドの最初の4バイトが返されます。
SQL> SELECT * FROM dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCO NEW YORK
20 RESE DALLAS
30 SALE CHICAGO
40 OPER BOSTON
4 rows selected.
親トピック: transform
15.6 ORACLE_LOADERアクセス・ドライバのパラレル・ロードに関する考慮点
ORACLE_LOADER
アクセス・ドライバでは、大きいデータ・ファイルを、個別に処理できるチャンクに分割します。
次のファイル、レコードおよびデータ特性によって、ファイルのパラレル処理が禁止されます。
-
順次データ・ソース(テープ・ドライブ、パイプなど)
-
文字の境界が文字列中の任意のバイトで始まり、境界を判断できないマルチバイト文字セットのデータ
この制限事項は、1レコード当たりのバイト数が固定のデータ・ファイルには適用されません。
-
VAR
形式のレコード
PARALLEL
句の指定は、大量のデータを扱う場合にのみ有効です。
親トピック: ORACLE_LOADERアクセス・ドライバ
15.7 ORACLE_LOADERアクセス・ドライバを使用する際のパフォーマンスのヒント
このトピックでは、ORACLE_LOADER
アクセス・ドライバを使用する際のパフォーマンスのヒントについて説明します。
パフォーマンスを監視する場合、最も重要なことは、ロードの経過時間の測定です。また、CPU使用量、メモリー使用量およびI/O率の測定も重要です。
並列度を増減することによって、パフォーマンスを変更できます。並列度は、データ・ファイルの処理に起動できるアクセス・ドライバの数を示します。並列度によって、リソース使用率を低くした遅いロードと、すべてのリソースを使用した速いロードを選択できます。アクセス・ドライバは、アクセス・ドライバ専用に使用するリソース量を判断できないため、自動的にはチューニングされません。
さらに考慮する必要があるのは、アクセス・ドライバで大きなI/Oバッファを使用すると、パフォーマンスが向上するという点です(バッファのサイズは、READSIZE
句をアクセス・パラメータで使用して指定できます)。共有サーバーを使用するデータベースでは、アクセス・ドライバが使用するすべてのメモリーはSystem Global Area(SGA)から割り当てられます。そのため、共有サーバー上の外部表を使用する際には注意が必要です。
また、パフォーマンスは、日付キャッシュ機能を使用して向上できる場合もあります。ロード中に予測される一意の日付の数を指定するために日付キャッシュを使用すると、入力データ内に多数の重複する日付またはタイムスタンプ値が存在する場合に日付変換が実行される回数を減らすことができます。外部表で提供される日付キャッシュ機能は、SQL*Loaderで提供されるものと同じです。詳細は、「DATE_CACHE」を参照してください。
パフォーマンスを向上させるには、並列度の変更および日付キャッシュの使用に加えて、次のことを考慮してください。
-
固定長レコードは、文字列で終了しているレコードより速く処理される。
-
固定長フィールドは、デリミタ付きフィールドより速く処理される。
-
シングルバイト文字セットは、最も速く処理される。
-
固定幅文字セットは、可変幅文字セットより速く処理される。
-
可変幅文字セットのバイト長セマンティクスは、文字長セマンティクスより早く処理される。
-
1文字のレコード終了デリミタおよびフィールド・デリミタは、複数文字のデリミタより速く処理される。
-
文字セットを変換するより、データ・ファイルの文字セットをデータベースの文字セットに一致させる方が速く処理される。
-
データ型を変換するより、データ・ファイルのデータ型をデータベースのデータ型に一致させる方が速く処理される。
-
拒否された行を拒否ファイルに書き込まない場合は、オーバーヘッドが削減されるため、処理速度が速くなる。
-
条件句(
WHEN
、NULLIF
およびDEFAULTIF
を含む)を使用すると、処理速度が遅くなる。 -
アクセス・ドライバは、マルチスレッドを使用して作業をできるだけ簡素化します。
親トピック: ORACLE_LOADERアクセス・ドライバ
15.8 ORACLE_LOADERアクセス・ドライバ使用時の制限事項
この項では、ORACLE_LOADER
アクセス・ドライバを使用する際に認識しておく必要がある制限事項について説明します。
具体的には次のとおりです。
-
暗号化された列がある外部表のエクスポートとインポートは、サポートされていません。
-
列処理: デフォルトでは、外部表の機能は、外部表に定義されたすべての列をフェッチします。これによって、すべての問合せに対し、一貫した結果が保証されます。ただし、パフォーマンスを考慮して、外部表内で参照される列だけを処理することができます。これによって、データ変換の量および問合せの実行で必要なデータ処理の量を最小限にします。この場合、データ型変換エラーが発生した列を含んでいたために拒否された行も、その列が参照されないかぎり、別の問合せでは拒否されません。
ALTER TABLE
コマンドを使用すると、この列処理動作を変更できます。 -
外部表は、
LONG
列にデータをロードできません。 -
ORACLE_LOADER
アクセス・ドライバのアクセス・パラメータにSQL文字列を指定できません。解決策として、外部表を読み取る文のSELECT
句にDECODE
句を使用できます。また、DECODE
句を使用する外部表のビューを作成して、外部表ではなくそのビューから選択することもできます。 -
外部表では、文字列内のバックスラッシュ(\)の使用はサポートされていません。詳細は、「バックスラッシュ・エスケープ文字の使用」を参照してください。
-
外部表アクセス・パラメータにおいて列名や表名などの識別子が指定される場合、特定の値はアクセス・パラメータ・パーサーによって予約語とみなされます。予約語を識別子として使用するには、二重引用符で囲む必要があります。
親トピック: ORACLE_LOADERアクセス・ドライバ
15.9 ORACLE_LOADERアクセス・ドライバの予約語
外部表アクセス・パラメータにおいて列名や表名などの識別子が指定される場合、特定の値はアクセス・パラメータ・パーサーによって予約語とみなされます。
予約語を識別子として使用するには、二重引用符で囲む必要があります。ORACLE_LOADER
アクセス・ドライバの予約語は、次のとおりです。
-
ALL
-
AND
-
ARE
-
ASTERISK
-
AT
-
ATSIGN
-
BADFILE
-
BADFILENAME
-
BACKSLASH
-
BENDIAN
-
BIG
-
BLANKS
-
BY
-
BYTES
-
BYTESTR
-
CHAR
-
CHARACTERS
-
CHARACTERSET
-
CHARSET
-
CHARSTR
-
CHECK
-
CLOB
-
COLLENGTH
-
COLON
-
COLUMN
-
COMMA
-
CONCAT
-
CONSTANT
-
COUNTED
-
DATA
-
DATE
-
DATE_CACHE
-
DATE_FORMAT
-
DATEMASK
-
DAY
-
DEBUG
-
DECIMAL
-
DEFAULTIF
-
DELIMITBY
-
DELIMITED
-
DISCARDFILE
-
DNFS_ENABLE
-
DNFS_DISABLE
-
DNFS_READBUFFERS
-
DOT
-
DOUBLE
-
DOUBLETYPE
-
DQSTRING
-
DQUOTE
-
DSCFILENAME
-
ENCLOSED
-
ENDIAN
-
ENDPOS
-
EOF
-
EQUAL
-
EXIT
-
EXTENDED_IO_PARAMETERS
-
EXTERNAL
-
EXTERNALKW
-
EXTPARM
-
FIELD
-
FIELDS
-
FILE
-
FILEDIR
-
FILENAME
-
FIXED
-
FLOAT
-
FLOATTYPE
-
FOR
-
FROM
-
HASH
-
HEXPREFIX
-
IN
-
INTEGER
-
INTERVAL
-
LANGUAGE
-
IS
-
LEFTCB
-
LEFTTXTDELIM
-
LEFTP
-
LENDIAN
-
LDRTRIM
-
LITTLE
-
LOAD
-
LOBFILE
-
LOBPC
-
LOBPCCONST
-
LOCAL
-
LOCALTZONE
-
LOGFILE
-
LOGFILENAME
-
LRTRIM
-
LTRIM
-
MAKE_REF
-
MASK
-
MINUSSIGN
-
MISSING
-
MISSINGFLD
-
MONTH
-
NEWLINE
-
NO
-
NOCHECK
-
NOT
-
NOBADFILE
-
NODISCARDFILE
-
NOLOGFILE
-
NOTEQUAL
-
NOTERMBY
-
NOTRIM
-
NULL
-
NULLIF
-
OID
-
OPTENCLOSE
-
OPTIONALLY
-
OPTIONS
-
OR
-
ORACLE_DATE
-
ORACLE_NUMBER
-
PLUSSIGN
-
POSITION
-
PROCESSING
-
QUOTE
-
RAW
-
READSIZE
-
RECNUM
-
RECORDS
-
REJECT
-
RIGHTCB
-
RIGHTTXTDELIM
-
RIGHTP
-
ROW
-
ROWS
-
RTRIM
-
SCALE
-
SECOND
-
SEMI
-
SETID
-
SIGN
-
SIZES
-
SKIP
-
STRING
-
TERMBY
-
TERMEOF
-
TERMINATED
-
TERMWS
-
TERRITORY
-
TIME
-
TIMESTAMP
-
TIMEZONE
-
TO
-
TRANSFORMS
-
UNDERSCORE
-
UINTEGER
-
UNSIGNED
-
VALUES
-
VARCHAR
-
VARCHARC
-
VARIABLE
-
VARRAW
-
VARRAWC
-
VLENELN
-
VMAXLEN
-
WHEN
-
WHITESPACE
-
WITH
-
YEAR
-
ZONED
親トピック: ORACLE_LOADERアクセス・ドライバ