この章では、ORACLE_LOADER
型の外部表に固有のアクセス・パラメータのセットを提供するORACLE_LOADER
アクセス・ドライバについて説明します。アクセス・ドライバのデフォルトの動作を変更するためにアクセス・パラメータを使用できます。アクセス・ドライバで指定する情報により、データ・ソースのデータが、外部表の定義と一致するように処理されます。
この章の内容は、次のとおりです。
この章で説明する情報を使用するには、使用するプラットフォームのデータ・ファイルのファイル形式およびレコード形式(キャラクタ・セット、フィールドのデータ型など)についての知識が必要です。また、外部表を作成し、その外部表に問合せを実行するためのSQLの知識も必要です。
SQL*LoaderでEXTERNAL_TABLE=
GENERATE_ONLY
パラメータを使用すると、任意のSQL*Loader制御ファイルに適正なアクセス・パラメータを取得できます。GENERATE_ONLY
を指定すると、制御ファイルに記述されているとおり、SQL*Loaderログ・ファイル内の外部表を使用してロードを行うために必要なすべてのSQL文が書き込まれます。これらのSQL文は、編集およびカスタマイズできます。実際のロードは、SQL*Loaderを使用せずに、SQL*Plusでこれらの文を実行して、後で行うことができます。
注意:
|
access_parameters句には、コメント、レコード形式およびフィールド形式の情報が含まれています。
データ・ソースのデータの記述は外部表の定義とは別です。これは、次のことを意味します。
ソース・ファイルに含まれるフィールドの数は、外部表の列数と異なる場合があります。
データ・ソースのフィールドのデータ型は、外部表の列のデータ型と異なる場合があります。
アクセス・ドライバによって、データ・ソースのデータが、外部表の定義と一致するように処理されます。
access_parameters
句の構文は次のとおりです。
参照:
|
コメント
コメントは、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句」を参照してください。
record_format_info
句には、レコード(形式など)、データのキャラクタ・セットおよびレコードをロード対象とする規則についての情報が含まれます。また、PREPROCESSOR
副次句も使用すると、ユーザーが用意したプログラムの名前を指定し、そのプログラムを実行して、ORACLE_LOADER
アクセス・ドライバで解析できるようにデータ・ファイルの内容を変更することもできます。
record_format_info
句はオプションです。句を指定しない場合、デフォルトの値はRECORDS
DELIMITED
BY
NEWLINE
です。record_format_info
句の構文は次のとおりです。
et_record_spec_options
句を使用すると、追加の書式情報をオプションで指定できます。書式オプションは必要な数だけ任意の順序で指定できます。オプションの構文は次のとおりです。
FIXED
句を使用して、すべてのレコードをバイト単位の固定長として識別します。FIXED
レコードに対して指定したサイズには、改行などのレコード終了文字を含める必要があります。他のレコード型と比較して、固定長レコードの固定長フィールドは、アクセス・ドライバを最も簡単に処理できるフィールドおよびレコード形式です。
次に、FIXED
レコードが使用されている例を示します。データ・ファイルの各レコードの末尾に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 (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
VARIABLE
句を使用して、レコードを可変長として識別します。各レコードの先頭に、レコードのバイト数を示す文字列が付きます。カウント・フィールドを含む文字列の長さは、VARIABLE
パラメータの後に続くサイズ引数となります。サイズは、文字数ではなく、バイト数で表されることに注意してください。レコードの先頭の数値にレコード終了文字の分が含まれる必要があります。ただし、カウント・フィールド自身のサイズは含まれません。レコード終了文字のバイト数は、ファイルの作成方法および作成時のプラットフォームによって異なります。
次に、VARIABLE
レコードが使用されている例を示します。データ・ファイルの各レコードの末尾に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 (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,
DELIMITED BY
句を使用して、レコードの終わりを識別する文字を指定します。
DELIMITED BY NEWLINE
を指定する場合、実際に使用される値はプラットフォームに依存します。UNIXプラットフォームでは、NEWLINE
は「\n
」です。Windows NTでは、NEWLINE
は「\r\n
」です。
DELIMITED
BY
string
を指定する場合、string
は、テキストまたは一連の16進数のいずれかになります。16進数の場合は、OXまたはXで開始して引用符で囲みます。テキストの場合は、データ・ファイルのキャラクタ・セットに変換され、その結果がレコードの境界の識別に使用されます。詳細は、「string」を参照してください。
次の条件を満たす場合は、デリミタの識別には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
CHARACTERSET
string
句を使用して、データ・ファイルのキャラクタ・セットを識別します。キャラクタ・セットを指定しない場合、データベースのデフォルトのキャラクタ・セットが使用されます。詳細は、「string」を参照してください。
注意: クライアントのNLS環境変数設定は、データベースに使用されるキャラクタ・セットに影響しません。 |
参照: Oracleでサポートされるキャラクタ・セットのリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
注意: PREPROCESSOR 句を使用する場合は、セキュリティ上の影響を考慮する必要があります。詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。 |
ロードするファイルにORACLE_LOADER
アクセス・ドライバでサポートしていない形式のデータ・レコードが含まれる場合は、PREPROCESSOR
句を使用して、ユーザーが用意するプリプロセッサ・プログラムを指定し、そのプログラムをすべてのデータ・ファイルに対して実行します。プログラムの指定は、引数を使用する場合にシェル・スクリプトに入れる必要があります(「file_spec」の説明を参照)。
プリプロセッサ・プログラムは、アクセス・ドライバがサポートするレコード形式にデータを変換し、変換したレコード・データを標準出力(stdout)に書き出します。アクセス・ドライバはそのデータを入力として読み取ることになります。PREPROCESSOR
句の構文は次のとおりです。
directory_spec
各データ・ファイルに対して実行するプリプロセッサ・プログラムの名前が含まれるディレクトリ・オブジェクトを指定します。外部表にアクセスするユーザーには、使用されるディレクトリ・オブジェクトのEXECUTE
権限が必要です。directory_spec
を省略した場合は、外部表に対して指定されたデフォルトのディレクトリが使用されます。
注意: セキュリティ上の理由から、プリプロセッサ・プログラムは、デフォルト・ディレクトリでなく別のディレクトリを使用して格納することをお薦めします。プリプロセッサ・プログラムが格納されているディレクトリには別のファイルを保管しないでください。 |
プリプロセッサ・プログラムは、ディレクトリ・オブジェクト内に存在する必要があります。これは、セキュリティ上の理由から、プログラムへのアクセスを制御できるようにするためです。OSシステム管理者は、そのディレクトリ・オブジェクトに対応するディレクトリを作成し、OSユーザーORACLEがそのディレクトリへのアクセス権を持っていることを確認する必要があります。DBAは、承認されたユーザーのみが、ディレクトリ・パスに関連付けられたディレクトリ・オブジェクトにアクセスできるようにする必要があります。ディレクトリ・オブジェクトのアクセス権は、複数のデータベース・ユーザーに付与できますが、そのディレクトリ内のプリプロセッサを実行できるのはEXECUTE
権限を持つユーザーのみです。ディレクトリ・オブジェクトへの読取り/書込み権限を持つ既存データベース・ユーザーでは、前処理の機能を使用できません。DBAがディレクトリ・オブジェクトのEXECUTE
権限をどのユーザーにも付与しなければ、プリプロセッサの使用を禁止できます。
参照: EXECUTE 権限を付与する方法については、『Oracle Database SQL言語リファレンス』を参照してください。 |
file_spec
プリプロセッサ・プログラムの名前です。この名前は、使用されているディレクトリ・オブジェクト(directory_spec
または外部表のデフォルト・ディレクトリのいずれか)に関連付けられたパス名の後ろに追加されます。file_spec
に絶対ディレクトリ・パスや相対ディレクトリ・パスを含めることはできません。
プリプロセッサ・プログラムに引数(gunzip -c
など)が必要な場合は、プログラム名とその引数を実行可能シェル・スクリプト(Windowsシステムではバッチ(.bat)・ファイル)で指定する必要があります。シェル・スクリプトは、directory_spec
に存在する必要があります。PREPROCESSOR
句に使用するシェル・スクリプトを作成するときは、次の点に注意してください。
gunzip
などのシステム・コマンドのフルパス名を指定する必要があります。
プリプロセッサのシェル・スクリプトには、EXECUTE権限が必要です。
外部表のLOCATION
句にリストされているデータ・ファイルは、$1で参照する必要があります。(Windowsシステムでは、LOCATION
句を%1で参照します。)
Windowsシステムでは、.batファイル内の最初の行が次のようになっている必要があります。
@echo off
そうなっていない場合は、デフォルトでWindowsによってバッチ・ファイルの内容がエコー処理されます(外部表のアクセス・ドライバによって入力として処理されます)。
シェル・スクリプトの使用例については、例14-2を参照してください。
オペレーティング・システム・ディレクトリに正しいバージョンのプリプロセッサ・プログラムがあることを必ず確認してください。
例14-1は、外部表作成時のPREPROCESSOR
句の使用例を示しています。プリプロセッサ・ファイルは、データ・ファイルおよびログ・ファイルとは別のディレクトリにあります。
例14-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:'zcat' 8 FIELDS (recno char(2000))) 9 LOCATION ('foo.dat.gz')) 10 REJECT LIMIT UNLIMITED; Table created.
例14-2は、外部表作成時のPREPROCESSOR
句でのシェル・スクリプトの指定方法を示しています。
例14-2 シェル・スクリプトでの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.
外部表では、LOCATION
句で指定された各データ・ファイルが単一グラニュルとして扱われます。PREPROCESSOR
句によるパラレル処理を最大限に活用するには、ロードされるデータを複数ファイル(グラニュル)に分割する必要があります。これは、外部表における並列度が、存在するデータ・ファイル数までに制限されるためです。たとえば、並列度を16に指定し、データ・ファイルが10個のみ存在する場合には、10個のスレーブ・プロセスがビジーとなり、6個がアイドル状態になるため、実際の並列度は10となります。アイドル状態のスレーブ・プロセスがないことが最適な状態です。したがって、並列度を指定する場合、すべてのスレーブ・プロセスがビジーになるように、並列度がデータ・ファイル数を超えないことが理想的です。
参照:
|
LANGUAGE
句を使用すると、データのロケール依存情報を得るための言語名(FRENCHなど)を指定できます。次に、言語名から得られる情報のタイプの例を示します。
月と日の名前およびその略称
A.M.、P.M.、A.D.およびB.C.と同じ内容を表す記号
SQL句ORDER BY
が指定されたときの、文字データのデフォルトのソート順序
筆記方向(右から左、左から右)
肯定応答および否定応答の文字列(YES
、NO
など)
参照: Oracleでサポートされる言語のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
TERRITORY
句を使用すると、地域名を指定して、入力データの特性をより詳細に指定することができます。たとえば、カンマではなく小数点(531,298のかわりに531.298など)が数字に使用される国もあります。
参照: Oracleでサポートされる地域のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。 |
DATA IS...ENDIAN
句を使用して、データ・ファイルを生成したプラットフォームによってバイト順序が異なるデータのエンディアンを指定します。次の型のフィールドは、この句の影響を受けます。
INTEGER
UNSIGNED INTEGER
FLOAT
BINARY_FLOAT
DOUBLE
BINARY_DOUBLE
VARCHAR
(数値のみ)
VARRAW
(数値のみ)
UTF16キャラクタ・セットの文字データ型
RECORDS
DELIMITED
BY
string
によって指定するUTF16キャラクタ・セット文字列
リトル・エンディアン・データを生成する一般的なプラットフォームはWindows NTです。ビッグ・エンディアン・プラットフォームには、Sun SolarisおよびIBM MVSがあります。DATA IS...ENDIAN
句を指定しない場合、データは、アクセス・ドライバが実行されているプラットフォームと同じエンディアンになります。UTF-16データ・ファイルには、ファイルの先頭にデータのエンディアンを示すマークがあります。このマークは、DATA IS...ENDIAN
句に優先します。
BYTE
ORDER
MARK
句を使用して、データ・ファイルにバイト順序マーク(BOM)があるかを確認するかどうかを指定します。この句は、キャラクタ・セットがUnicodeの場合にのみ有効です。
BYTE
ORDER
MARK
NOCHECK
を指定すると、データ・ファイルにBOMが存在するかどうかが確認されず、データ・ファイルのすべてのデータがデータとして読み込まれます。
BYTE
ORDER
MARK
CHECK
を指定すると、データ・ファイルにBOMがあるかどうかを確認します。これはUnicodeキャラクタ・セットのデータ・ファイルについてのデフォルト動作です。
次に、使用例をいくつか示します。
データをリトル・エンディアンまたはビッグ・エンディアンとして指定し、CHECK
を指定したときにそのエンディアンがデータ・ファイルと一致していないと判断された場合は、エラーが返されます。たとえば、次のパラメータを指定したとします。
DATA IS LITTLE ENDIAN BYTEORDERMARK CHECK
Unicodeデータ・ファイル内にBOMが存在するかどうかが確認され、そのデータが実際にはビッグ・エンディアンであった場合は、リトル・エンディアンを指定していたため、エラーが返されます。
BOMが存在せず、DATA
IS...ENDIAN
パラメータを使用してエンディアンを指定しない場合は、プラットフォームのエンディアンが使用されます。
BYTE
ORDER
MARK
NOCHECK
を指定し、DATA
IS...ENDIAN
パラメータを使用してエンディアンを指定した場合は、その値が使用されます。それ以外の場合は、プラットフォームのエンディアンが使用されます。
STRING
SIZES
ARE
IN
句を使用して、文字列の長さがバイト単位であるか、または文字単位であるかを指定します。この句を指定しない場合、アクセス・ドライバは、データベースが使用するモードを使用します。長さが埋め込まれた文字型(VARCHAR
など)も、この句の影響を受けます。この句を指定すると、埋め込まれた長さは、バイト数ではなく、文字数となります。UTF16などのマルチバイト・キャラクタ・セットのロード時には、STRING
SIZES
ARE
IN CHARACTERS
を指定する必要があります。
LOAD
WHEN
condition_spec
句を使用して、データベースに渡すレコードを識別します。評価の方法は様々です。
condition_spec
句がレコードのフィールドを参照する場合、この句は、すべてのフィールドがレコードから解析された後で、NULLIF
句またはDEFAULTIF
句の評価が行われる前にのみ評価されます。
条件指定が範囲のみを参照する(フィールド名は参照しない)場合、フィールドが解析される前に句が評価されます。これは、ファイル中のロードできないレコードを、エラーなしで現行のレコード定義に解析できない場合に有効です。
詳細は、「condition_spec」を参照してください。
次に、LOAD
WHEN
の使用例を示します。
LOAD WHEN (empid != BLANKS) LOAD WHEN ((dept_id = "SPORTING GOODS" OR dept_id = "SHOES") AND total_sales != 0)
BADFILE
句を使用して、エラーのためにロードできない場合にレコードが書き込まれるファイルを指定します。たとえば、データ・ファイルのフィールドは外部表の列のデータ型に変換できないため、不良ファイルにレコードが書き込まれます。LOAD
WHEN
句が正常に実行されない場合、レコードは不良ファイルには書き込まれず、かわりに、廃棄ファイルに書き込まれます。また、外部表のレコードを使用中にエラーが発生する場合は(外部表に対してINSERT INTO...AS SELECT...
を使用した場合の制約違反など)、レコードは不良ファイルに書き込まれません。
不良ファイルの目的は、すべての拒否されたデータを調査および修正して、ファイルをロードできるようにすることです。不良レコードがあってもデータを修正しない場合は、NOBADFILE
オプションを使用して不良ファイルの作成を回避できます。
BADFILE
を指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。
BADFILE
またはNOBADFILE
のいずれも指定しない場合、デフォルトでは1つ以上のレコードが拒否されると、不良ファイルが作成されます。このファイルの名前は、表名の後に_%p
が付いたものになり、拡張子.bad
が付けられます。
詳細は、「[directory object name:] filename」を参照してください。
DISCARDFILE
句を使用して、レコードがLOAD
WHEN
句の条件を満たすことができないことが書き込まれるファイルを指定します。この廃棄ファイルは、廃棄される最初のレコードが検出されると作成されます。同じ外部表が複数回アクセスされる場合、廃棄ファイルはそのたびに再度書き込まれます。廃棄レコードを個別のファイルに保存する必要がない場合、NODISCARDFILE
を使用します。
DISCARDFILE
を指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。
DISCARDFILE
またはNODISCARDFILE
のいずれも指定しない場合、デフォルトでは1つ以上のレコードでLOAD
WHEN
句が失敗すると、廃棄ファイルが作成されます。このファイルの名前は、表名の後に_%p
が付いたものになり、拡張子.dsc
が付けられます。
詳細は、「[directory object name:] filename」を参照してください。
LOGFILE
句を使用して、データ・ファイルのデータへのアクセス中に外部表のユーティリティによって生成されたメッセージを含むファイルを指定します。ログ・ファイルがすでに同じ名前で存在する場合は、アクセス・ドライバによってそのログ・ファイルが再びオープンされ、新しいログ情報がファイルの終わりに追加されます。この点では、既存のファイルを上書きする不良ファイルおよび廃棄ファイルとは異なります。NOLOGFILE
を使用してログ・ファイルの作成を回避できます。
LOGFILE
を指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。
LOGFILE
またはNOLOGFILE
のいずれも指定しない場合、デフォルトではログ・ファイルが作成されます。このファイルの名前は、表名の後に_%p
が付いたものになり、拡張子.log
が付けられます。
詳細は、「[directory object name:] filename」を参照してください。
READSIZE
パラメータは、レコードの処理に使用する読取りバッファのサイズを指定します。読取りバッファのサイズは、アクセス・ドライバで処理する最大入力レコードのサイズ以上にする必要があります。サイズは、整数のバイト数で指定します。デフォルト値は512KB(524288バイト)です。データ・ファイル内に512KBより大きいレコードがある場合は、デフォルト値より大きい値を指定する必要があります。READSIZE
のサイズに上限はありませんが、アクセス・ドライバで割当て可能なメモリーの最大量が事実上の上限となります。
追加のバッファが割り当てられる場合もあるため、割当てに使用可能なメモリーの量によっても制限されます。追加のバッファは、(データ内、デリミタ、またはマルチ・キャラクタ/バイトのデリミタが使用されている場合はそのデリミタのいずれかで)分割された可能性のあるレコードの処理を正常に完了するために使用されます。
デフォルトでは、ORACLE_LOADER
アクセス・ドライバは、データやログ・ファイルを開く前にチェックを行い、使用するディレクトリがシンボリック・リンクでないことを確認します。DISABLE_DIRECTORY_LINK_CHECK
パラメータ(引数なし)を指定して、このチェックを回避するようにアクセス・ドライバに指示すると、親ディレクトリがシンボリック・リンクの可能性があるファイルも使用できます。
注意: シンボリック・リンクは外部表のロード操作での入力や出力をリダイレクトするために使用される可能性もあるため、このパラメータの使用にはセキュリティのリスクが伴います。 |
デフォルトでは、(1000要素に対して)日付キャッシュ機能が使用できます。日付キャッシュ機能を完全に使用禁止にするには、0
(ゼロ)に設定します。
DATE_CACHE
は、日付キャッシュ・サイズ(エントリ数)を指定します。たとえば、DATE_CACHE=5000
を指定すると、作成された日付キャッシュごとに最大5000の一意の日付エントリが含まれます。必要に応じて、すべての表に固有の日付キャッシュが作成されます。日付キャッシュは、表への格納のためにデータ型変換が必要な日付値またはタイムスタンプ値が1つ以上ロードされた場合にのみ作成されます。
日付キャッシュ機能は、デフォルトで使用可能です。デフォルトの日付キャッシュ・サイズは1000要素です。デフォルトのサイズを使用し、1000を超える一意の入力値をロードすると、日付キャッシュ機能は、この表に対して自動的に使用禁止となります。ただし、デフォルトを変更して0以外の日付キャッシュ・サイズを指定し、キャッシュ量がこのサイズを超えた場合、キャッシュは使用禁止になりません。
ログ・ファイルに含まれている日付キャッシュ統計(エントリ数、ヒット数、ミス数)を使用して、将来、同様のロードを行うときのためにキャッシュのサイズを調整できます。
stringは、引用符で囲まれた一連の文字または16進数字です。一連の文字の場合、これらの文字はデータ・ファイルのキャラクタ・セットに変換されます。また、16進数字の場合には、偶数にする必要があります。16進数字は、バイナリに翻訳されたものに変換され、その翻訳結果はデータ・ファイルのキャラクタ・セット内の文字列として処理されます。これは、16進数字がバイナリに翻訳されたものに変換された後では、他のキャラクタ・セットの翻訳が実行されないことを意味します。 string
の構文は次のとおりです。
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
この句を使用して、出力ファイル(BADFILE
、DISCARDFILE
またはLOGFILE
)の名前を指定します。そのディレクトリ・オブジェクト名は、外部表にアクセスしているユーザーが書込み権限を所有しているディレクトリ・オブジェクトの名前です。このディレクトリ・オブジェクト名を指定しない場合、CREATE
TABLE...
ORGANIZATION
EXTERNAL
文のDEFAULT
DIRECTORY
句に対して指定した値が使用されます。
filename
パラメータは、ディレクトリ・オブジェクト内に作成するファイルの名前です。パラレル・ロードでファイル名を一意にするには、アクセス・ドライバで記号置換を行います。UNIXおよびWindows NTでサポートされる記号置換は、次のとおりです(その他のプラットフォームでは、別の記号が使用される場合があります)。
%p
は、現行のプロセスのプロセスIDに置換されます。たとえば、アクセス・ドライバのプロセスIDが12345
の場合、exttab_%p.log
は、exttab_12345.log
となります。
%a
は、現行のプロセスのエージェント番号に置換されます。エージェント番号は、外部表にアクセスしている各パラレル・プロセスに割り当てられた一意の番号です。この番号には、3文字になるように、左側に0が埋められます。たとえば、3番目のパラレル・エージェントがファイルを作成する場合、bad_data_%a.bad
をファイル名として指定した場合、エージェントはbad_data_003.bad
というファイルを作成します。
%%
は、%
に置換されます。ファイル名にパーセント符号が必要な場合、この記号置換が使用されます。
%
文字が検出され、前述の文字以外の文字がその後に続く場合、エラーが返されます。
%p
または%a
を使用しないで出力ファイルに対して一意のファイル名を作成し、外部表にパラレルでアクセス中の場合、出力ファイルが破損するか、エージェントがファイルに書込みをできないという問題が発生する場合があります。
BADFILE
(またはDISCARDFILE
かLOGFILE
)を指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。ただし、BADFILE
(またはDISCARDFILE
かLOGFILE
)を指定しない場合、アクセス・ドライバでは、表の名前に_%p
を付いたものがファイル名として使用されます。ファイルに対して拡張子がない場合は、デフォルトの拡張子が使用されます。デフォルトの拡張子は、不良ファイルでは.bad
、廃棄ファイルでは.dsc
、ログ・ファイルでは.log
となります。
condition
を使用して、定数文字列とレコードのバイト範囲またはフィールドを比較します。比較のソースは、レコードのフィールドまたはレコードのバイト範囲のいずれかです。比較はバイト単位で実行されます。文字列を比較のターゲットとして指定すると、データ・ファイルのキャラクタ・セットに変換されます。フィールドに文字以外のデータ型が含まれる場合、データ型変換はフィールド値および文字列のいずれでも実行されません。condition
の構文は次のとおりです。
この句を使用してレコードのバイト範囲または文字範囲を記述して条件を指定します。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"
IO_OPTIONS
句によって、オペレーティング・システムがデータ・ファイルを読み取るために使用するI/Oオプションを指定できます。指定可能なオプションはDIRECTIO
とNODIRECTIO
(デフォルト)のみです。
DIRECTIO
オプションを指定すると、直接I/Oを使用してデータ・ファイルのオープンおよび読取りが試行されます。試行が成功した場合、オペレーティング・システムとNFSサーバー(ファイルがNFSサーバー上にあるとき)では、ファイルから読み取ったデータをキャッシュしません。これにより、特にファイルが大きい場合に、データ・ファイルの読取りパフォーマンスが向上します。読取り対象のデータ・ファイルについてDIRECTIO
オプションがサポートされない場合、ファイルは開かれて読み取られますが、DIRECTIO
オプションは無視されます。
NODIRECTIO
オプションが指定されるか、IO_OPTIONS
句が指定されない場合、データ・ファイルの読取りに直接I/Oは使用されません。
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
delim_spec句
delim_spec
句を使用して、レコード内のすべてのフィールドの終了位置を識別します。すべてのフィールドに指定されるdelim_spec
は、特定のフィールドに対してfield_list
句の一部として上書きできます。構文の詳細は、「delim_spec」を参照してください。
trim_spec句
trim_spec
句を使用して、すべての文字フィールドでデフォルトとして実行される空白の切捨てタイプを指定します。すべてのフィールドに指定されるtrim_spec
句は、個々のフィールドに対してtrim_spec
句を指定して上書きできます。構文の詳細は、「trim_spec」を参照してください。
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」としてログ・ファイルに書き込まれます。
field_list句
field_list
句を使用して、データ・ファイルのフィールドおよびそのデータ型を識別します。構文の詳細は、「field_list」を参照してください。
delim_spec
句を使用して、フィールドの終了位置(ENCLOSED
BY
を指定する場合は、開始位置)を検索します。構文は次のとおりです。
ENCLOSED
BY
を指定すると、アクセス・ドライバで、レコードの現在の位置から最初のデリミタまでの間のすべての空白がスキップされます。現在の位置と最初のデリミタの間のすべての空白が無視されます。次に、アクセス・ドライバでは、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
を指定した場合、レコードの現在の位置は、フィールドの後に続くすべての空白の後に設定されます。
レコードの最後のフィールドで終了記号が欠落している場合は、エラーではありません。アクセス・ドライバは、終了記号が検出された場合と同様に処理を行います。2番目の囲みデリミタが欠落している場合は、エラーとなります。
2番目の囲みに使用される文字列は、2番目の囲みを2回続けることによって、データ・フィールドに含むことができます。たとえば、フィールドが一重引用符で囲まれる場合、次の例のdon'tという単語で示すような方法で一重引用符を2つ並べて指定することによって、フィールドに一重引用符を含むことができます。
'I don''t like green eggs and ham'
囲みデリミタを使用せずに、データ・フィールドの終了文字列を引用符で囲む方法はありません。フィールドに終了デリミタを含むことができるのは、フィールド・パーサーが囲みデリミタを検出するまで終了デリミタを検索しないためです。
通常、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
次に、囲みデリミタと終了デリミタの両方を使用する外部表の例を示します。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)
次に、オプションの囲みデリミタを使用する外部表の例を示します。フィールドの先頭および後続の空白を切り捨てるために、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)
trim_spec
句を使用して、空白をテキスト・フィールドの始めから切り捨てるか、終わりから切り捨てるか、またはその両方から切り捨てるかを指定します。空白には、空白文字およびその他の印字されない文字(タブ、LF、改行など)が含まれます。 trim_spec
句の構文は次のとおりです。
フィールドから文字を切り捨てない場合は、NOTRIM
を使用します。
フィールドから文字を切り捨てる場合は、LRTRIM
、LTRIM
およびRTRIM
を使用します。LRTRIM
を使用すると、先頭と後続の空白の両方が切り捨てられます。先頭の空白を切り捨てるには、LTRIM
を使用します。後続の空白を切り捨てるには、RTRIM
を使用します。
SQL*Loaderの切捨て機能との互換性を保つには、LDRTRIM
を使用します。次の場合を除いて、NOTRIM
と同様です。
フィールドがデリミタ付きのフィールドではない場合、空白は右から切り捨てられる。
フィールドがOPTIONALLY
ENCLOSED
BY
で指定されたデリミタ付きフィールドで、オプションの囲みが特定のインスタンスで欠落している場合、空白は左から切り捨てられる。
デフォルトは、LDRTRIM
です。NOTRIM
を指定すると、パフォーマンスが向上します。
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
MISSING FIELD VALUES ARE NULL
は、レコードのすべてのフィールドに十分なデータがない場合、データ値が欠落しているフィールドがNULL
に設定されることを示します。MISSING FIELD VALUES ARE 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_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_list
句の構文は次のとおりです。
field_name
field_name
は、データ・ファイルのフィールド名を識別する文字列です。文字列が引用符内にない場合、フィールド名は外部表の列名に一致され、大文字になります。
field_name
が問合せで参照される外部表の列名と一致する場合は、このフィールド値が外部表列の値に使用されます。名前が外部表で参照されたいずれの名前にも一致しない場合、フィールドはロードされません。ただし、このフィールドは句の評価(たとえば、WHEN
またはNULLIF
)には使用できます。
pos_spec
pos_spec
句を使用して、レコード内の列の位置を指定します。構文の詳細は、「pos_spec句」を参照してください。
datatype_spec
datatype_spec
句を使用して、フィールドのデータ型を指定します。datatype_spec
が指定されない場合、アクセス・ドライバは、データ型はCHAR(255)
であると想定します。構文の詳細は、「datatype_spec句」を参照してください。
init_spec
init_spec
句を使用して、フィールドがNULL
になる、またはデフォルトの値を設定されるタイミングを指定します。構文の詳細は、「init_spec句」を参照してください。
pos_spec
句を使用して、レコード内の列の位置を指定します。STRING
SIZES
ARE
IN
句を設定して、pos_spec
がバイト位置と文字位置のどちらを参照するかを決定します。可変幅キャラクタ・セットで文字位置を使用すると、固定幅キャラクタ・セットで文字位置を使用するより大幅に時間がかかります。pos_spec
が文字位置に使用されると、バイナリ文字データとマルチバイト文字データは、同じデータ・ファイルには指定できません。指定した場合の結果は保証されません。pos_spec
句の構文は次のとおりです。
start
パラメータは、レコードの開始位置からフィールドの開始位置までのバイト数または文字数です。前のフィールド位置からの相対ではなく、レコードの絶対位置でフィールドの開始位置を設定します。
*
パラメータで、フィールドが前のフィールドの直後のバイトまたは文字から始まることを指定します。これは、可変長フィールドの後に固定長フィールドが続く場合に有効です。このオプションは、レコードの最初のフィールドには使用できません。
increment
パラメータを使用して、フィールドの開始位置を前のフィールドの終了位置からの固定のバイト数または固定の文字数で設定します。*-
increment
を使用して、フィールドの開始位置をレコードの現在の位置の前に指定します。*+
increment
を使用して、開始位置を現在の位置の後に移動します。
end
パラメータを使用して、フィールドの終了バイトをレコード内の絶対バイトまたは絶対文字オフセットで指定します。start
をend
とともに指定する場合、end
は、start
より小さくできません。*
またはincrement
をend
とともに指定し、start
が特定のレコードのend
より大きいオフセットと評価された場合、レコードは拒否されます。
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 (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
データ型がデフォルトと異なる場合、datatype_spec
句を使用して、データ・ファイルのフィールドのデータ型を指定します。フィールドのデータ型は、外部表内の対応する列のデータ型と異なる場合があります。アクセス・ドライバで必要な変更が行われます。datatype_spec
句の構文は次のとおりです。
フィールドのバイト数または文字数が0の場合、フィールドはNULL
であると想定されます。オプションのDEFAULTIF
句を使用して、フィールドをデフォルトの値に設定するタイミングを指定します。また、オプションのNULLIF
句で、フィールドに対応付けられた列をNULL
に設定するタイミングに関するその他の条件を指定します。DEFAULTIF
句またはNULLIF
句がtrue
の場合、これらの句を使用すると、データ・ファイルから読み込まれるすべての値が上書きされます。
この句を使用して、フィールドを整数として定義します。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
でない場合)。
DECIMAL
句を使用して、フィールドがPACKED型の10進数であることを指定します。ZONED
句を使用して、フィールドがZONED型の10進数であることを指定します。precision
フィールドで、数値の桁数を指定します。scale
フィールドで、数値の小数点の位置を指定します。つまり、小数点の右側にくる桁数を指定します。scale
を指定しない場合、値は0となります。
使用中のキャラクタ・セットがEBCDICベースかASCIIベースかによって、ZONED型の10進数には異なるエンコーディング形式があることに注意してください。ソース・データの言語がEBCDICの場合、そのファイルのZONED型の10進数は、EBCDICエンコーディングと一致する必要があります。言語がASCIIベースの場合、その数値はASCIIエンコーディングと一致する必要があります。
EXTERNAL
パラメータを指定する場合、データ・フィールドは、その長さがフィールドの精度と一致する文字列です。
ORACLE_DATE
は、Oracleバイナリ日付フォーマットの日付を含むフィールドであることを指定します。これは、Oracle Call Interface(OCI)プログラムでは、DTYDAT
データ型として使用される形式です。固定長7のフィールドです。
ORACLE_NUMBER
は、Oracle数値書式の数値を含むフィールドであることを指定します。COUNTED
を指定しないかぎり、フィールドは固定長(Oracle数値フィールドの最大サイズ)です。その場合、フィールドの最初のバイトには残りのフィールドのバイト数が含まれます。
ORACLE_NUMBER
は、固定長22バイトのフィールドです。ORACLE_NUMBER
COUNTED
フィールドの長さは、カウント・バイト用の1バイトに、カウント・バイトで指定されたバイト数を加えた長さです。
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言語リファレンス』を参照してください。 |
DOUBLE
句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のDOUBLE
データ型と同じ形式であることを指定します。DATA
IS
{BIG
|
LITTLE}
ENDIAN
句を使用すると、データは格納される前にバイト・スワップされます。このデータ型は特定のプラットフォーム間では移植できません。
FLOAT
句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のFLOAT
データ型と同じ形式であることを指定します。DATA
IS
{BIG
|
LITTLE}
ENDIAN
句を使用すると、データは格納される前にバイト・スワップされます。このデータ型は特定のプラットフォーム間では移植できません。
EXTERNAL
パラメータを指定する場合、フィールドは、最大長255の文字列です。関連する情報を参照してください。
BINARY_DOUBLE
は、64ビット倍精度の浮動小数点数データ型です。各BINARY_DOUBLE
値では、長さを示すバイトを含め9バイトを必要とします。浮動小数点数の詳細は、FLOAT
データ型の注意に関する情報を参照してください。
BINARY_FLOAT
は、32ビット単精度の浮動小数点数データ型です。各BINARY_FLOAT
値では、長さを示すバイトを含め5バイトを必要とします。浮動小数点数の詳細は、FLOAT
データ型の注意に関する情報を参照してください。
RAW
句を使用して、ソース・データがバイナリ・データであることを指定します。RAW
フィールドに対するlen
は常にバイト単位です。RAW
フィールドがキャラクタ列にロードされると、列に書き込まれるデータは、RAW
フィールドのバイトの16進表現となります。
CHAR
句を使用して、フィールドが文字データ型であることを指定します。CHAR
フィールドの長さ(len
)で、フィールドの最大バイト数または最大文字数を指定します。len
は、STRING
SIZES
ARE
IN
句の設定に応じて、バイト単位または文字単位になります。
CHAR
データ型のフィールドに長さを指定しない場合、フィールドが区切られていないかぎり、フィールド・サイズは1になります。
デリミタ付きCHAR
フィールドでは、長さが指定されている場合、その長さが最大長として使用されます。
長さが指定されていないデリミタ付きCHAR
フィールドでは、デフォルトの255バイトが使用されます。
デリミタ付きで255バイトを超えるCHAR
フィールドには、最大長を指定する必要があります。指定しない場合は、データ・ファイルのフィールドが最大長を超えているというエラーを受信します。
date_format_spec
句を使用して、指定された形式の日付または時刻がフィールドに含むことを指定します。
次に、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.
date_format_spec
句を使用して、特定の形式の日付データまたは時刻データ(またはその両方)が文字列フィールドに含まれることを指定します。この情報は、文字フィールドが日付データ型または時刻データ型に変換される場合、および文字列フィールドが日付列にマップされる場合のみに使用されます。
日付と時刻の書式を正しく指定する方法の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
date_format_spec
句の構文は次のとおりです。
MASK句を使用して、データ型に対するデフォルトのグローバリゼーション書式マスクを上書きします。日付マスクを指定しない場合は、データ型に対する適切なグローバリゼーション・パラメータのデータベースのNLSパラメータ設定(セッションの設定ではない)が使用されます。NLS_DATABASE_PARAMETERS
ビューに、これらの設定が表示されます。
DATE
データ型のNLS_DATE_FORMAT
TIMESTAMP
データ型のNLS_TIMESTAMP_FORMAT
TIMESTAMP
WITH
TIME
ZONE
データ型のNLS_TIMESTAMP_TZ_FORMAT
次のことに注意してください。
NLS_NUMERIC_CHARACTERS
初期化パラメータのデータベース設定(NLS_DATABASE_PARAMETERS
ビューの設定)によって、文字データ型から数値データ型への暗黙的な変換に使用される小数点区切りが制御されます。
デフォルトの書式では、桁区切りは使用できません。
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
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形式ではなくバイナリ形式の値になります。したがって、この例をカット・アンド・ペーストで使用すると、エラーが返されます。
VARCHARC
データ型には、文字データが後に続く文字カウント・フィールドが含まれます。カウント・フィールドの値は、フィールドのバイト数または文字数のいずれかです。数値が、文字数とバイト数のどちらで解釈されるかを指定する方法の詳細は、「STRING SIZES ARE IN」を参照してください。オプションのlength_of_length
は、長さが文字とバイトのどちらで解釈されるかに応じて、VARCHARC
に対するカウント・フィールドのバイト数または文字数のいずれかになります。
VARCHARC
に対するlength_of_lengths
の最大値は、文字列のサイズが文字単位の場合は10で、文字列のサイズがバイト単位の場合は20です。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
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
と評価された場合のみに評価されます。
オプションのcolumn_transforms
句は、データ・ファイルの列に直接マップされない外部表の列をロードする方法を記述するために使用できる変換を提供します。column_transforms
句の構文は次のようになります。
transform
句で指定された各変換では、外部表の列を識別し、次に列の値の計算方法を指定します。構文は次のようになります。
NULL
変換は、外部表の列を各行でNULL
に設定します。CONSTANT
変換は、外部表の列をすべての行で同じ値に設定するために使用されます。CONCAT
変換は、外部表の列をデータ・ファイルからの現在のレコード内の定数文字列またはフィールド(あるいはその両方)の連結に設定するために使用されます。LOBFILE
変換は、別のデータ・ファイルからのレコードのフィールドにデータをロードするために使用されます。これらの各変換については、次の項で詳しく説明します。
column_name
は、ロードする外部表の列を一意に識別します。transform
句で列名が参照される場合、その名前は、データ・ファイルのフィールドとしてFIELDS
句で指定することはできません。
CONSTANT
変換では、レコードの列の値として指定された文字列の値が使用されます。外部表の列が文字列型でない場合、定数文字列は列のデータ型に変換されます。この変換は各行に対して行われます。
データ型変換で使用される文字列のキャラクタ・セットは、データベースのキャラクタ・セットです。
CONCAT
変換は、データ・ファイルの定数文字列とフィールドを連結して1つの文字列にします。連結の一部として使用できるフィールドは、文字データ型でfields
句にリストされているフィールドのみです。他の列変換は、連結の一部として指定できません。
LOBFILE
変換は、外部表の列の値として内容を使用するファイルを識別します。すべてのLOBFILEは、directory object:filename
形式のオプションのディレクトリ・オブジェクトおよびファイル名で識別されます。LOBFILE
変換には次の規則が適用されます。
ディレクトリ・オブジェクトおよびファイル名は、定数文字列またはフィールド句のフィールド名のいずれかです。
定数文字列が指定された場合、その文字列を使用して表の各行のLOBFILEを検索します。
フィールド名が指定された場合、データ・ファイル内のそのフィールドの値を使用してLOBFILEを検索します。
ディレクトリ・オブジェクトまたはファイル名のいずれかに対してフィールド名が指定され、そのフィールドの値がNULL
の場合、LOBFILEによってロードされる列もNULL
に設定されます。
ディレクトリ・オブジェクトが指定されない場合、外部表に対して指定されたデフォルトのディレクトリが使用されます。
ディレクトリ・オブジェクトに対してフィールド名が指定された場合、FROM
句も指定する必要があります。
ファイル全体がLOB列の値として使用されます。複数の行で同じファイルが参照されると、各列を移入するためにファイルが再びオープンし、再び読み込まれます。
lobfile_attr_list
は、LOBFILEの追加属性をリストします。構文は次のようになります。
FROM
句は、LOBFILEで使用されるすべてのディレクトリ・オブジェクトの名前をリストします。LOBFILEの名前のディレクトリ・オブジェクトに対して、フィールド名が指定された場合にのみ使用します。FROM
句の目的は、初期化時に名前付きのディレクトリ・オブジェクトに許可されたアクセス権の種類を識別することにあります。フィールドの値に指定されたディレクトリ・オブジェクトが、リスト内のディレクトリ・オブジェクトではない場合、行は拒否されます。
CLOB
属性は、LOBFILE内のデータがRAW
データではなく、文字データであることを示します。場合によって文字データは、データベース内にLOBを格納するために使用されるキャラクタ・セットに変換する必要があります。
CHARACTERSET
属性は、LOBFILE内のデータのキャラクタ・セット名を含みます。
BLOB
属性は、LOBFILE内のデータが生データであることを示します。
CLOB
またはBLOB
のいずれも指定されない場合、CLOB
であるとみなされます。文字LOBFILEに対してキャラクタ・セットが指定されない場合、データ・ファイルのキャラクタ・セットであるとみなされます。
この項の手順では、ORACLE_LOADER
アクセス・ドライバを使用した外部表の作成およびロードの例を示します。emp
という従来の表とemp_load
という外部表が定義されます。外部データは次に内部表にロードされます。
.dat
ファイルが次のとおりであるとします。
56november, 15, 1980 baker mary alice 09/01/2004 87december, 20, 1970 roper lisa marie 01/01/2002
データ・ソースを含むデフォルトのディレクトリを設定して、それに対するアクセス権限を付与するには、次のSQL文を実行します。
CREATE DIRECTORY def_dir1 AS '/usr/apps/datafiles'; GRANT READ ON DIRECTORY ext_tab_dir TO SCOTT;
emp
という名前の従来の表を作成します。
CREATE TABLE emp (emp_no CHAR(6), last_name CHAR(25), first_name CHAR(20), middle_initial CHAR(1), hire_date DATE, dob DATE);
emp_load
という名前の外部表を作成します。
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.
emp_load
外部表からemp
表へデータをロードします。
SQL> INSERT INTO emp (emp_no, 2 first_name, 3 middle_initial, 4 last_name, 5 hire_date, 6 dob) 7 (SELECT employee_number, 8 employee_first_name, 9 substr(employee_middle_name, 1, 1), 10 employee_last_name, 11 employee_hire_date, 12 to_date(employee_dob,'month, dd, yyyy') 13 FROM emp_load); 2 rows created.
.dat
ファイル内の情報がemp
表にロードされたことを確認するために、次の選択操作を行います。
SQL> SELECT * FROM emp; EMP_NO LAST_NAME FIRST_NAME M HIRE_DATE DOB ------ ------------------------- -------------------- - --------- --------- 56 baker mary a 01-SEP-04 15-NOV-80 87 roper lisa m 01-JAN-02 20-DEC-70 2 rows selected.
この例に関する注意事項
データ・ファイルのemployee_number
フィールドは、外部表のemployee_number
フィールドの文字列に変換されます。
データ・ファイルには、表のいずれのフィールドにもロードされないemployee_dob
フィールドが含まれています。
外部表のemployee_middle_name
列で使用されているsubstr
関数によって、emp
表のmiddle_initial
の値が生成されます。
info.dat
内のemployee_hire_date
の文字列は、外部表の定義で指定されている書式マスクを使用して、外部表へのアクセス時にDATE
データ型に自動的に変換されます。
employee_hire_date
とは異なり、employee_dob
に対するDATE
データ型への変換は、SELECT
時に行われます。この変換は、外部表の定義には含まれていません。
参照: 日付と時刻の書式を正しく指定する方法の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。 |
ORACLE_LOADER
アクセス・ドライバでは、大きいデータ・ファイルを、個別に処理できるチャンクに分割します。
次のファイル、レコードおよびデータ特性によって、ファイルのパラレル処理が禁止されます。
順次データ・ソース(テープ・ドライブ、パイプなど)
文字の境界が文字列中の任意のバイトで始まり、境界を判断できないマルチバイト・キャラクタ・セットのデータ
この制限事項は、1レコード当たりのバイト数が固定のデータ・ファイルには適用されません。
VAR
形式のレコード
PARALLEL
句の指定は、大量のデータを扱う場合にのみ有効です。
パフォーマンスを監視する場合、最も重要なことは、ロードの経過時間の測定です。また、CPU使用量、メモリー使用量およびI/O率の測定も重要です。
並列度を増減することによって、パフォーマンスを変更できます。並列度は、データ・ファイルの処理に起動できるアクセス・ドライバの数を示します。並列度によって、リソース使用率を低くした遅いロードと、すべてのリソースを使用した速いロードを選択できます。アクセス・ドライバは、アクセス・ドライバ専用に使用するリソース量を判断できないため、自動的にはチューニングされません。
さらに考慮する必要があるのは、アクセス・ドライバで大きなI/Oバッファを使用すると、パフォーマンスが向上するという点です(バッファのサイズは、READSIZE
句をアクセス・パラメータで使用して指定できます)。共有サーバーを使用するデータベースでは、アクセス・ドライバが使用するすべてのメモリーはSystem Global Area(SGA)から割り当てられます。そのため、共有サーバー上の外部表を使用する際には注意が必要です。
また、パフォーマンスは、日付キャッシュ機能を使用して向上できる場合もあります。ロード中に予測される一意の日付の数を指定するために日付キャッシュを使用すると、入力データ内に多数の重複する日付またはタイムスタンプ値が存在する場合に日付変換が実行される回数を減らすことができます。外部表で提供される日付キャッシュ機能は、SQL*Loaderで提供されるものと同じです。詳細は、「DATE_CACHE」を参照してください。
パフォーマンスを向上させるには、並列度の変更および日付キャッシュの使用に加えて、次のことを考慮してください。
固定長レコードは、文字列で終了しているレコードより速く処理される。
固定長フィールドは、デリミタ付きフィールドより速く処理される。
シングルバイト・キャラクタ・セットは、最も速く処理される。
固定幅キャラクタ・セットは、可変幅キャラクタ・セットより速く処理される。
可変幅キャラクタ・セットのバイト長セマンティクスは、文字長セマンティクスより早く処理される。
1文字のレコード終了デリミタおよびフィールド・デリミタは、複数文字のデリミタより速く処理される。
キャラクタ・セットを変換するより、データ・ファイルのキャラクタ・セットをデータベースのキャラクタ・セットに一致させる方が速く処理される。
データ型を変換するより、データ・ファイルのデータ型をデータベースのデータ型に一致させる方が速く処理される。
拒否された行を拒否ファイルに書き込まない場合は、オーバーヘッドが削減されるため、処理速度が速くなる。
条件句(WHEN
、NULLIF
およびDEFAULTIF
を含む)を使用すると、処理速度が遅くなる。
アクセス・ドライバは、マルチスレッドを使用して作業をできるだけ簡素化します。
この項では、ORACLE_LOADER
アクセス・ドライバを使用する際に認識しておく必要がある制限事項について説明します。
ORACLE_LOADER
アクセス・ドライバのアクセス・パラメータにSQL文字列を指定できません。解決策として、外部表を読み取る文のSELECT
句にDECODE
句を使用できます。また、DECODE
句を使用する外部表のビューを作成して、外部表ではなくそのビューから選択することもできます。
外部表では、文字列内のバックスラッシュ(\)の使用はサポートされていません。詳細は、「バックスラッシュ・エスケープ文字の使用」を参照してください。
外部表アクセス・パラメータにおいて列名や表名などの識別子が指定される場合、特定の値はアクセス・パラメータ・パーサーによって予約語とみなされます。予約語を識別子として使用するには、二重引用符で囲む必要があります。
外部表アクセス・パラメータにおいて列名や表名などの識別子が指定される場合、特定の値はアクセス・パラメータ・パーサーによって予約語とみなされます。予約語を識別子として使用するには、二重引用符で囲む必要があります。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
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