プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
11gリリース2 (11.2)
B56303-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

14 ORACLE_LOADERアクセス・ドライバ

この章では、ORACLE_LOADER型の外部表に固有のアクセス・パラメータのセットを提供するORACLE_LOADERアクセス・ドライバについて説明します。アクセス・ドライバのデフォルトの動作を変更するためにアクセス・パラメータを使用できます。アクセス・ドライバで指定する情報により、データ・ソースのデータが、外部表の定義と一致するように処理されます。

この章の内容は、次のとおりです。

この章で説明する情報を使用するには、使用するプラットフォームのデータ・ファイルのファイル形式およびレコード形式(キャラクタ・セット、フィールドのデータ型など)についての知識が必要です。また、外部表を作成し、その外部表に問合せを実行するためのSQLの知識も必要です。

SQL*LoaderでEXTERNAL_TABLE=GENERATE_ONLYパラメータを使用すると、任意のSQL*Loader制御ファイルに適正なアクセス・パラメータを取得できます。GENERATE_ONLYを指定すると、制御ファイルに記述されているとおり、SQL*Loaderログ・ファイル内の外部表を使用してロードを行うために必要なすべてのSQL文が書き込まれます。これらのSQL文は、編集およびカスタマイズできます。実際のロードは、SQL*Loaderを使用せずに、SQL*Plusでこれらの文を実行して、後で行うことができます。


注意:

  • 章の後半で説明されているその他の構文を使用しなければ、わかりにくい場合があります。構文によって行われる処理が明確でない場合は、先に進み、その説明を参照してください。

  • この章では、外部表の場合のCREATE TABLE...ORGANIZATION EXTERNAL文の例をデータ・ファイルの内容のサンプルとともに示します。これらの内容は、CREATE TABLE文の一部ではなく、完全な例を示します。

  • 外部表アクセス・パラメータにおいて列名や表名などの識別子が指定される場合、特定の値はアクセス・パラメータ・パーサーによって予約語とみなされます。予約語を識別子として使用するには、二重引用符で囲む必要があります。「ORACLE_LOADERアクセス・ドライバの予約語」を参照してください。


access_parameters句

access_parameters句には、コメント、レコード形式およびフィールド形式の情報が含まれています。

データ・ソースのデータの記述は外部表の定義とは別です。これは、次のことを意味します。

  • ソース・ファイルに含まれるフィールドの数は、外部表の列数と異なる場合があります。

  • データ・ソースのフィールドのデータ型は、外部表の列のデータ型と異なる場合があります。

アクセス・ドライバによって、データ・ソースのデータが、外部表の定義と一致するように処理されます。

access_parameters句の構文は次のとおりです。

et_access_param.gifの説明が続きます。
図et_access_param.gifの説明


注意:

これらのアクセス・パラメータは、SQL文のCREATE TABLE...ORGANIZATION EXTERNALopaque_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句はオプションであり、データ・ファイルの列に直接マップされない外部表の列のロード方法を記述するために使用します。NULLCONSTANTCONCATおよびLOBFILE変換を使用して行います。構文の詳細は、「column_transforms句」を参照してください。

record_format_info句

record_format_info句には、レコード(形式など)、データのキャラクタ・セットおよびレコードをロード対象とする規則についての情報が含まれます。また、PREPROCESSOR副次句も使用すると、ユーザーが用意したプログラムの名前を指定し、そのプログラムを実行して、ORACLE_LOADERアクセス・ドライバで解析できるようにデータ・ファイルの内容を変更することもできます。

record_format_info句はオプションです。句を指定しない場合、デフォルトの値はRECORDS DELIMITED BY NEWLINEです。record_format_info句の構文は次のとおりです。

et_record_spec.gifの説明が続きます。
図et_record_spec.gifの説明

et_record_spec_options句を使用すると、追加の書式情報をオプションで指定できます。書式オプションは必要な数だけ任意の順序で指定できます。オプションの構文は次のとおりです。

et_record_spec_options.gifの説明が続きます
図et_record_spec_options.gifの説明

FIXED長

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パラメータの後に続くサイズ引数となります。サイズは、文字数ではなく、バイト数で表されることに注意してください。レコードの先頭の数値にレコード終了文字の分が含まれる必要があります。ただし、カウント・フィールド自身のサイズは含まれません。レコード終了文字のバイト数は、ファイルの作成方法および作成時のプラットフォームによって異なります。

次に、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句を使用して、レコードの終わりを識別する文字を指定します。

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

CHARACTERSET string句を使用して、データ・ファイルのキャラクタ・セットを識別します。キャラクタ・セットを指定しない場合、データベースのデフォルトのキャラクタ・セットが使用されます。詳細は、「string」を参照してください。


注意:

クライアントのNLS環境変数設定は、データベースに使用されるキャラクタ・セットに影響しません。


参照:

Oracleでサポートされるキャラクタ・セットのリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

PREPROCESSOR


注意:

PREPROCESSOR句を使用する場合は、セキュリティ上の影響を考慮する必要があります。詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

ロードするファイルにORACLE_LOADERアクセス・ドライバでサポートしていない形式のデータ・レコードが含まれる場合は、PREPROCESSOR句を使用して、ユーザーが用意するプリプロセッサ・プログラムを指定し、そのプログラムをすべてのデータ・ファイルに対して実行します。プログラムの指定は、引数を使用する場合にシェル・スクリプトに入れる必要があります(「file_spec」の説明を参照)。

プリプロセッサ・プログラムは、アクセス・ドライバがサポートするレコード形式にデータを変換し、変換したレコード・データを標準出力(stdout)に書き出します。アクセス・ドライバはそのデータを入力として読み取ることになります。PREPROCESSOR句の構文は次のとおりです。

et_preprocessor_spec.gifの説明が続きます。
図et_preprocessor_spec.gifの説明

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.

PREPROCESSOR句によるパラレル処理の使用

外部表では、LOCATION句で指定された各データ・ファイルが単一グラニュルとして扱われます。PREPROCESSOR句によるパラレル処理を最大限に活用するには、ロードされるデータを複数ファイル(グラニュル)に分割する必要があります。これは、外部表における並列度が、存在するデータ・ファイル数まで制限されるためです。たとえば、並列度を16に指定し、データ・ファイルが10個のみ存在する場合には、10個のスレーブ・プロセスがビジーとなり、6個がアイドル状態になるため、実際の並列度は10となります。アイドル状態のスレーブ・プロセスがないことが最適な状態です。したがって、並列度を指定する場合、すべてのスレーブ・プロセスがビジーになるように、並列度がデータ・ファイル数を超えないことが理想的です。


参照:

  • 並列度のグラニュルの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。


PREPROCESSOR句を使用する際の制限事項

  • Database Vault機能を使用するデータベースでは、PREPROCESSOR句を使用できません。

LANGUAGE

LANGUAGE句を使用すると、データのロケール依存情報を得るための言語名(FRENCHなど)を指定できます。次に、言語名から得られる情報のタイプの例を示します。

  • 月と日の名前およびその略称

  • A.M.、P.M.、A.D.およびB.C.と同じ内容を表す記号

  • SQL句ORDER BYが指定されたときの、文字データのデフォルトのソート順序

  • 筆記方向(右から左、左から右)

  • 肯定応答および否定応答の文字列(YESNOなど)


参照:

Oracleでサポートされる言語のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

TERRITORY

TERRITORY句を使用すると、地域名を指定して、入力データの特性をより詳細に指定することができます。たとえば、カンマではなく小数点(531,298のかわりに531.298など)が数字に使用される国もあります。


参照:

Oracleでサポートされる地域のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

DATA IS...ENDIAN

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句に優先します。

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パラメータを使用してエンディアンを指定しない場合は、プラットフォームのエンディアンが使用されます。

  • BYTEORDERMARK NOCHECKを指定し、DATA IS...ENDIANパラメータを使用してエンディアンを指定した場合は、その値が使用されます。それ以外の場合は、プラットフォームのエンディアンが使用されます。

STRING SIZES ARE IN

STRING SIZES ARE IN句を使用して、文字列の長さがバイト単位であるか、または文字単位であるかを指定します。この句を指定しない場合、アクセス・ドライバは、データベースが使用するモードを使用します。長さが埋め込まれた文字型(VARCHARなど)も、この句の影響を受けます。この句を指定すると、埋め込まれた長さは、バイト数ではなく、文字数となります。UTF16などのマルチバイト・キャラクタ・セットのロード時には、STRING SIZES ARE IN CHARACTERSを指定する必要があります。

LOAD WHEN

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 | NOBADFILE

BADFILE句を使用して、エラーのためにロードできない場合にレコードが書き込まれるファイルを指定します。たとえば、データ・ファイルのフィールドは外部表の列のデータ型に変換できないため、不良ファイルにレコードが書き込まれます。LOAD WHEN句が正常に実行されない場合、レコードは不良ファイルには書き込まれず、かわりに、廃棄ファイルに書き込まれます。また、外部表のレコードを使用中にエラーが発生する場合は(外部表に対してINSERT INTO...AS SELECT...を使用した場合の制約違反など)、レコードは不良ファイルに書き込まれません。

不良ファイルの目的は、すべての拒否されたデータを調査および修正して、ファイルをロードできるようにすることです。不良レコードがあってもデータを修正しない場合は、NOBADFILEオプションを使用して不良ファイルの作成を回避できます。

BADFILEを指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。

BADFILEまたはNOBADFILEのいずれも指定しない場合、デフォルトでは1つ以上のレコードが拒否されると、不良ファイルが作成されます。このファイルの名前は、表名の後に_%pが付いたものになり、拡張子.badが付けられます。

詳細は、「[directory object name:] filename」を参照してください。

DISCARDFILE | NODISCARDFILE

DISCARDFILE句を使用して、レコードがLOAD WHEN句の条件を満たすことができないことが書き込まれるファイルを指定します。この廃棄ファイルは、廃棄される最初のレコードが検出されると作成されます。同じ外部表が複数回アクセスされる場合、廃棄ファイルはそのたびに再度書き込まれます。廃棄レコードを個別のファイルに保存する必要がない場合、NODISCARDFILEを使用します。

DISCARDFILEを指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。

DISCARDFILE またはNODISCARDFILEのいずれも指定しない場合、デフォルトでは1つ以上のレコードでLOAD WHEN句が失敗すると、廃棄ファイルが作成されます。このファイルの名前は、表名の後に_%pが付いたものになり、拡張子.dscが付けられます。

詳細は、「[directory object name:] filename」を参照してください。

LOG FILE | NOLOGFILE

LOGFILE句を使用して、データ・ファイルのデータへのアクセス中に外部表のユーティリティによって生成されたメッセージを含むファイルを指定します。ログ・ファイルがすでに同じ名前で存在する場合は、アクセス・ドライバによってそのログ・ファイルが再びオープンされ、新しいログ情報がファイルの終わりに追加されます。この点では、既存のファイルを上書きする不良ファイルおよび廃棄ファイルとは異なります。NOLOGFILEを使用してログ・ファイルの作成を回避できます。

LOGFILEを指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。

LOGFILEまたはNOLOGFILEのいずれも指定しない場合、デフォルトではログ・ファイルが作成されます。このファイルの名前は、表名の後に_%pが付いたものになり、拡張子.logが付けられます。

詳細は、「[directory object name:] filename」を参照してください。

SKIP

ロードの前に、データ・ファイルに含まれる、指定した件数のレコードをスキップします。SKIPは、データにパラレルにアクセスしない場合にのみ指定できます。

READSIZE

READSIZEパラメータは、レコードの処理に使用する読取りバッファのサイズを指定します。読取りバッファのサイズは、アクセス・ドライバで処理する最大入力レコードのサイズ以上にする必要があります。サイズは、整数のバイト数で指定します。デフォルト値は512KB(524288バイト)です。データ・ファイル内に512KBより大きいレコードがある場合は、デフォルト値より大きい値を指定する必要があります。READSIZEのサイズに上限はありませんが、アクセス・ドライバで割当て可能なメモリーの最大量が事実上の上限となります。

追加のバッファが割り当てられる場合もあるため、割当てに使用可能なメモリーの量によっても制限されます。追加のバッファは、(データ内、デリミタ、またはマルチ・キャラクタ/バイトのデリミタが使用されている場合はそのデリミタのいずれかで)分割された可能性のあるレコードの処理を正常に完了するために使用されます。

DISABLE_DIRECTORY_LINK_CHECK

デフォルトでは、ORACLE_LOADERアクセス・ドライバは、データやログ・ファイルを開く前にチェックを行い、使用するディレクトリがシンボリック・リンクでないことを確認します。DISABLE_DIRECTORY_LINK_CHECKパラメータ(引数なし)を指定して、このチェックを回避するようにアクセス・ドライバに指示すると、親ディレクトリがシンボリック・リンクの可能性があるファイルも使用できます。


注意:

シンボリック・リンクは外部表のロード操作での入力や出力をリダイレクトするために使用される可能性もあるため、このパラメータの使用にはセキュリティのリスクが伴います。

DATE_CACHE

デフォルトでは、(1000要素に対して)日付キャッシュ機能が使用できます。日付キャッシュ機能を完全に使用禁止にするには、0(ゼロ)に設定します。

DATE_CACHEは、日付キャッシュ・サイズ(エントリ数)を指定します。たとえば、DATE_CACHE=5000を指定すると、作成された日付キャッシュごとに最大5000の一意の日付エントリが含まれます。必要に応じて、すべての表に固有の日付キャッシュが作成されます。日付キャッシュは、表への格納のためにデータ型変換が必要な日付値またはタイムスタンプ値が1つ以上ロードされた場合にのみ作成されます。

日付キャッシュ機能は、デフォルトで使用可能です。デフォルトの日付キャッシュ・サイズは1000要素です。デフォルトのサイズを使用し、1000を超える一意の入力値をロードすると、日付キャッシュ機能は、この表に対して自動的に使用禁止となります。ただし、デフォルトを変更して0以外の日付キャッシュ・サイズを指定し、キャッシュ量がこのサイズを超えた場合、キャッシュは使用禁止になりません。

ログ・ファイルに含まれている日付キャッシュ統計(エントリ数、ヒット数、ミス数)を使用して、将来、同様のロードを行うときのためにキャッシュのサイズを調整できます。

string

stringは、引用符で囲まれた一連の文字または16進数字です。一連の文字の場合、これらの文字はデータ・ファイルのキャラクタ・セットに変換されます。また、16進数字の場合には、偶数にする必要があります。16進数字は、バイナリに翻訳されたものに変換され、その翻訳結果はデータ・ファイルのキャラクタ・セット内の文字列として処理されます。これは、16進数字がバイナリに翻訳されたものに変換された後では、他のキャラクタ・セットの翻訳が実行されないことを意味します。 stringの構文は次のとおりです。

et_string.gifの説明が続きます。
図et_string.gifの説明

condition_spec

condition_specは、真または偽のいずれかに評価される式です。ブール演算子によって結合される1つ以上の条件を指定します。条件およびブール演算子は、左から右へと評価されます。(ブール演算子は、条件が評価された後に適用されます。)カッコを使用して、ブール演算子を評価するデフォルトの順序を変更できます。condition_spec句の評価にはより多くのレコード処理時間が必要であるため、多くの句を使用しないようにする必要があります。condition_specの構文は次のとおりです。

et_cond_spec.gifの説明が続きます。
図et_cond_spec.gifの説明

条件指定にフィールド名を参照する条件が含まれている場合、条件指定は、すべてのフィールドがレコードで検出され、空白の切捨てが行われた後のみに評価されます。空白がフィールドから切り捨てられている場合、フィールドとBLANKSの比較は有効ではありません。

次に、condition_specの使用例を示します。

empid = BLANKS OR last_name = BLANKS
(dept_id = SPORTING GOODS OR dept_id = SHOES) AND total_sales != 0

参照:

「condition」

[directory object name:] filename

この句を使用して、出力ファイル(BADFILEDISCARDFILEまたは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(またはDISCARDFILELOGFILE)を指定する場合は、ファイル名を指定する必要があります。指定しない場合は、エラーが返されます。ただし、BADFILE (またはDISCARDFILELOGFILE)を指定しない場合、アクセス・ドライバでは、表の名前に_%pを付いたものがファイル名として使用されます。ファイルに対して拡張子がない場合は、デフォルトの拡張子が使用されます。デフォルトの拡張子は、不良ファイルでは.bad、廃棄ファイルでは.dsc、ログ・ファイルでは.log となります。

condition

conditionを使用して、定数文字列とレコードのバイト範囲またはフィールドを比較します。比較のソースは、レコードのフィールドまたはレコードのバイト範囲のいずれかです。比較はバイト単位で実行されます。文字列を比較のターゲットとして指定すると、データ・ファイルのキャラクタ・セットに変換されます。フィールドに文字以外のデータ型が含まれる場合、データ型変換はフィールド値および文字列のいずれでも実行されません。conditionの構文は次のとおりです。

et_condition.gifの説明が続きます。
図et_condition.gifの説明

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"

IO_OPTIONS句

IO_OPTIONS句によって、オペレーティング・システムがデータ・ファイルを読み取るために使用するI/Oオプションを指定できます。指定可能なオプションはDIRECTIONODIRECTIO(デフォルト)のみです。

DIRECTIOオプションを指定すると、直接I/Oを使用してデータ・ファイルのオープンおよび読取りが試行されます。試行が成功した場合、オペレーティング・システムとNFSサーバー(ファイルがNFSサーバー上にあるとき)では、ファイルから読み取ったデータをキャッシュしません。これにより、特にファイルが大きい場合に、データ・ファイルの読取りパフォーマンスが向上します。読取り対象のデータ・ファイルについてDIRECTIOオプションがサポートされない場合、ファイルは開かれて読み取られますが、DIRECTIOオプションは無視されます。

NODIRECTIOオプションが指定されるか、IO_OPTIONS句が指定されない場合、データ・ファイルの読取りに直接I/Oは使用されません。

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句の構文は次のとおりです。

et_fields_clause.gifの説明が続きます。
図et_fields_clause.gifの説明

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

delim_spec句を使用して、フィールドの終了位置(ENCLOSED BYを指定する場合は、開始位置)を検索します。構文は次のとおりです。

et_delim_spec.gifの説明が続きます。
図et_delim_spec.gifの説明

ENCLOSED BYを指定すると、アクセス・ドライバで、レコードの現在の位置から最初のデリミタまでの間のすべての空白がスキップされます。現在の位置と最初のデリミタの間のすべての空白が無視されます。次に、アクセス・ドライバでは、2番目の囲みデリミタが検索されます(または、2番目のデリミタが指定されていない場合は、最初のデリミタがもう1度検索されます)。これら2つのデリミタの間にあるすべての文字がフィールド部分とみなされます。

TERMINATED BY stringENCLOSED BY句で指定する場合、終了記号文字列は、2番目の囲みデリミタの直後に置く必要があります。2番目の囲みデリミタと終了デリミタの間の空白はスキップされます。2つのデリミタの間で空白以外の文字が検索される場合、正しく書式化されていないため行が拒否されます。

ENCLOSED BY句を使用せずにTERMINATED BYを指定する場合、レコードの現在の位置と次に検索される終了記号文字列の間にあるすべての文字がフィールド部分とみなされます。

OPTIONALLYを指定する場合は、TERMINATED BYも指定する必要があります。OPTIONALLYパラメータによって、ENCLOSED BYデリミタは、両方存在するかまたは両方存在しないかのいずれかであることが示されます。終了デリミタは、ENCLOSED BYデリミタの有無にかかわらず存在する必要があります。OPTIONALLYを指定する場合、アクセス・ドライバは、最初の空白以外の文字までのすべての空白をスキップします。最初の空白以外の文字が検索されると、アクセス・ドライバは、現在の位置に最初の囲みデリミタが含まれているかどうかを確認します。含まれている場合は、アクセス・ドライバによって2番目の囲み文字列が検索され、最初の囲みデリミタと2番目の囲みデリミタの間のすべての文字がフィールド部分とみなされます。終了デリミタは、2番目の囲みデリミタの直後に置く必要があります(2番目の囲みデリミタと終了デリミタの間にオプションで空白を置くことも可能)。最初の空白以外の文字が最初の囲み文字列ではない場合、アクセス・ドライバは終了デリミタを検索します。この場合、先頭の空白は切り捨てられます。


参照:

アクセス・ドライバのデフォルトの切捨て動作の詳細は、表10-5を参照してください。LTRIMおよびRTRIMを使用すると、この動作を変更できます。

デリミタが検出された後、レコードの現在の位置は、フィールドの最後のデリミタの後に設定されます。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

trim_spec句を使用して、空白をテキスト・フィールドの始めから切り捨てるか、終わりから切り捨てるか、またはその両方から切り捨てるかを指定します。空白には、空白文字およびその他の印字されない文字(タブ、LF、改行など)が含まれます。 trim_spec句の構文は次のとおりです。

et_trim_spec.gifの説明が続きます。
図et_trim_spec.gifの説明

フィールドから文字を切り捨てない場合は、NOTRIMを使用します。

フィールドから文字を切り捨てる場合は、LRTRIMLTRIMおよび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

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句を使用して、データ・ファイルのフィールドおよびそのデータ型を識別します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句の構文は次のとおりです。

et_field_list.gifの説明が続きます。
図et_field_list.gifの説明

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句

pos_spec句を使用して、レコード内の列の位置を指定します。STRING SIZES ARE IN句を設定して、pos_specがバイト位置と文字位置のどちらを参照するかを決定します。可変幅キャラクタ・セットで文字位置を使用すると、固定幅キャラクタ・セットで文字位置を使用するより大幅に時間がかかります。pos_specが文字位置に使用されると、バイナリ文字データとマルチバイト文字データは、同じデータ・ファイルには指定できません。指定した場合の結果は保証されません。pos_spec句の構文は次のとおりです。

et_position_spec.gifの説明が続きます。
図et_position_spec.gifの説明

start

startパラメータは、レコードの開始位置からフィールドの開始位置までのバイト数または文字数です。前のフィールド位置からの相対ではなく、レコードの絶対位置でフィールドの開始位置を設定します。

*

*パラメータで、フィールドが前のフィールドの直後のバイトまたは文字から始まることを指定します。これは、可変長フィールドの後に固定長フィールドが続く場合に有効です。このオプションは、レコードの最初のフィールドには使用できません。

increment

incrementパラメータを使用して、フィールドの開始位置を前のフィールドの終了位置からの固定のバイト数または固定の文字数で設定します。*-incrementを使用して、フィールドの開始位置をレコードの現在の位置の前に指定します。*+incrementを使用して、開始位置を現在の位置の後に移動します。

end

endパラメータを使用して、フィールドの終了バイトをレコード内の絶対バイトまたは絶対文字オフセットで指定します。startendとともに指定する場合、endは、startより小さくできません。*またはincrementendとともに指定し、startが特定のレコードのendより大きいオフセットと評価された場合、レコードは拒否されます。

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
     (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句を使用して、データ・ファイルのフィールドのデータ型を指定します。フィールドのデータ型は、外部表内の対応する列のデータ型と異なる場合があります。アクセス・ドライバで必要な変更が行われます。datatype_spec句の構文は次のとおりです。

et_datatype_spec.gifの説明が続きます。
図et_datatype_spec.gifの説明

フィールドのバイト数または文字数が0の場合、フィールドはNULLであると想定されます。オプションのDEFAULTIF句を使用して、フィールドをデフォルトの値に設定するタイミングを指定します。また、オプションのNULLIF句で、フィールドに対応付けられた列をNULLに設定するタイミングに関するその他の条件を指定します。DEFAULTIF句またはNULLIF句がtrueの場合、これらの句を使用すると、データ・ファイルから読み込まれるすべての値が上書きされます。


参照:

  • NULLIFおよびDEFAULTIFの詳細は、「init_spec句」を参照してください。

  • データ型の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。


[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でない場合)。

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パラメータを指定する場合、データ・フィールドは、その長さがフィールドの精度と一致する文字列です。

ORACLE_DATE

ORACLE_DATEは、Oracleバイナリ日付フォーマットの日付を含むフィールドであることを指定します。これは、Oracle Call Interface(OCI)プログラムでは、DTYDATデータ型として使用される形式です。固定長7のフィールドです。

ORACLE_NUMBER

ORACLE_NUMBERは、Oracle数値書式の数値を含むフィールドであることを指定します。COUNTEDを指定しないかぎり、フィールドは固定長(Oracle数値フィールドの最大サイズ)です。その場合、フィールドの最初のバイトには残りのフィールドのバイト数が含まれます。

ORACLE_NUMBERは、固定長22バイトのフィールドです。ORACLE_NUMBER COUNTEDフィールドの長さは、カウント・バイト用の1バイトに、カウント・バイトで指定されたバイト数を加えた長さです。

浮動小数点数

DOUBLEFLOATBINARY_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規格を使用しているため、FLOATBINARY_FLOATは、プラットフォーム上では同様となります。また、DOUBLEBINARY_DOUBLEも同様となります。


注意:

浮動小数点数の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

DOUBLE

DOUBLE句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のDOUBLEデータ型と同じ形式であることを指定します。DATA IS {BIG | LITTLE} ENDIAN句を使用すると、データは格納される前にバイト・スワップされます。このデータ型は特定のプラットフォーム間では移植できません。

FLOAT [EXTERNAL]

FLOAT句を使用して、フィールドが、アクセス・ドライバが実行されているプラットフォーム上のC言語のFLOATデータ型と同じ形式であることを指定します。DATA IS {BIG | LITTLE} ENDIAN句を使用すると、データは格納される前にバイト・スワップされます。このデータ型は特定のプラットフォーム間では移植できません。

EXTERNALパラメータを指定する場合、フィールドは、最大長255の文字列です。関連する情報を参照してください。

BINARY_DOUBLE

BINARY_DOUBLEは、64ビット倍精度の浮動小数点数データ型です。各BINARY_DOUBLE値では、長さを示すバイトを含め9バイトを必要とします。浮動小数点数の詳細は、FLOATデータ型の注意に関する情報を参照してください。

BINARY_FLOAT

BINARY_FLOATは、32ビット単精度の浮動小数点数データ型です。各BINARY_FLOAT値では、長さを示すバイトを含め5バイトを必要とします。浮動小数点数の詳細は、FLOATデータ型の注意に関する情報を参照してください。

RAW

RAW句を使用して、ソース・データがバイナリ・データであることを指定します。RAWフィールドに対するlenは常にバイト単位です。RAWフィールドがキャラクタ列にロードされると、列に書き込まれるデータは、RAWフィールドのバイトの16進表現となります。

CHAR

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

date_format_spec句を使用して、特定の形式の日付データまたは時刻データ(またはその両方)が文字列フィールドに含まれることを指定します。この情報は、文字フィールドが日付データ型または時刻データ型に変換される場合、および文字列フィールドが日付列にマップされる場合のみに使用されます。

日付と時刻の書式を正しく指定する方法の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

date_format_spec句の構文は次のとおりです。

et_dateformat.gifの説明が続きます。
図et_dateformat.gifの説明

DATE

DATE句を使用して、文字列に日付が含まれることを指定します。

MASK

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ビューの設定)によって、文字データ型から数値データ型への暗黙的な変換に使用される小数点区切りが制御されます。

  • デフォルトの書式では、桁区切りは使用できません。

TIMESTAMP

TIMESTAMP句を使用して、書式化されたタイムスタンプがフィールドに含まれることを指定します。

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/200401/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およびVARRAW

VARCHARデータ型には、文字データが後に続くバイナリ・カウント・フィールドが含まれます。バイナリ・カウント・フィールドの値は、フィールドのバイト数または文字数のいずれかです。数値が、文字数とバイト数のどちらで解釈されるかを指定する方法の詳細は、「STRING SIZES ARE IN」を参照してください。

VARRAWデータ型には、バイナリ・データが後に続くバイナリ・カウント・フィールドが含まれます。バイナリ・カウント・フィールドの値は、バイナリ・データのバイト数です。VARRAWフィールドのデータは、DATA ISENDIAN句の影響を受けません。

ACCESS PARAMETERS句の中のVARIABLE 2句は、長さを含むバイナリ・フィールドのサイズを規定します。

オプションのlength_of_lengthフィールドは、カウント・フィールドのバイト数です。VARCHARに対するlength_of_lengthの有効な値は、1、2、4および8です。length_of_lengthを指定しない場合、値に2が使用されます。カウント・フィールドは、DATA ISENDIAN句で指定されたとおりの同じエンディアンを持ちます。

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およびVARRAWC

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句

init_spec句を使用して、フィールドをNULLまたはデフォルト値に設定するタイミングを指定します。init_spec句の構文は次のとおりです。

et_init_spec.gifの説明が続きます。
図et_init_spec.gifの説明

NULLIF句およびDEFAULTIF句は、フィールドに各1回のみ指定できます。これらの句を使用して、次の処理を実行できます。

  • NULLIF condition_specを指定し、trueと評価された場合、フィールドはNULLに設定されます。

  • DEFAULTIF condition_specを指定し、trueと評価された場合、フィールドの値はデフォルトの値に設定されます。デフォルトの値は、フィールドのデータ型によって次のように異なります。

    • 文字データ型の場合は、デフォルトの値は空の文字列

    • 数値データ型の場合は、デフォルトの値は0

    • 日付データ型の場合は、デフォルトの値はNULL

  • NULLIF句とDEFAULTIF句の両方をフィールドに指定する場合、まずNULLIF句が評価され、DEFAULTIF句は、NULLIF句がfalseと評価された場合のみに評価されます。

column_transforms句

オプションのcolumn_transforms句は、データ・ファイルの列に直接マップされない外部表の列をロードする方法を記述するために使用できる変換を提供します。column_transforms句の構文は次のようになります。

et_column_trans.gifの説明が続きます。
図et_column_trans.gifの説明

transform

transform句で指定された各変換では、外部表の列を識別し、次に列の値の計算方法を指定します。構文は次のようになります。

et_transform.gifの説明が続きます。
図et_transform.gifの説明

NULL変換は、外部表の列を各行でNULLに設定します。CONSTANT変換は、外部表の列をすべての行で同じ値に設定するために使用されます。CONCAT変換は、外部表の列をデータ・ファイルからの現在のレコード内の定数文字列またはフィールド(あるいはその両方)の連結に設定するために使用されます。LOBFILE変換は、別のデータ・ファイルからのレコードのフィールドにデータをロードするために使用されます。これらの各変換については、次の項で詳しく説明します。

column_name

column_nameは、ロードする外部表の列を一意に識別します。transform句で列名が参照される場合、その名前は、データ・ファイルのフィールドとしてFIELDS句で指定することはできません。

NULL

NULL変換が指定された場合、フィールドのすべての値は各レコードに対してNULLに設定されます。

CONSTANT

CONSTANT変換では、レコードの列の値として指定された文字列の値が使用されます。外部表の列が文字列型でない場合、定数文字列は列のデータ型に変換されます。この変換は各行に対して行われます。

データ型変換で使用される文字列のキャラクタ・セットは、データベースのキャラクタ・セットです。

CONCAT

CONCAT変換は、データ・ファイルの定数文字列とフィールドを連結して1つの文字列にします。連結の一部として使用できるフィールドは、文字データ型でfields句にリストされているフィールドのみです。他の列変換は、連結の一部として指定できません。

LOBFILE

LOBFILE変換は、外部表の列の値として内容を使用するファイルを識別します。すべてのLOBFILEは、directory object:filename形式のオプションのディレクトリ・オブジェクトおよびファイル名で識別されます。LOBFILE変換には次の規則が適用されます。

  • ディレクトリ・オブジェクトおよびファイル名は、定数文字列またはフィールド句のフィールド名のいずれかです。

  • 定数文字列が指定された場合、その文字列を使用して表の各行のLOBFILEを検索します。

  • フィールド名が指定された場合、データ・ファイル内のそのフィールドの値を使用してLOBFILEを検索します。

  • ディレクトリ・オブジェクトまたはファイル名のいずれかに対してフィールド名が指定され、そのフィールドの値がNULLの場合、LOBFILEによってロードされる列もNULLに設定されます。

  • ディレクトリ・オブジェクトが指定されない場合、外部表に対して指定されたデフォルトのディレクトリが使用されます。

  • ディレクトリ・オブジェクトに対してフィールド名が指定された場合、FROM句も指定する必要があります。

ファイル全体がLOB列の値として使用されます。複数の行で同じファイルが参照されると、各列を移入するためにファイルが再びオープンし、再び読み込まれます。

lobfile_attr_list

lobfile_attr_listは、LOBFILEの追加属性をリストします。構文は次のようになります。

et_lobfile_attr.gifの説明が続きます。
図et_lobfile_attr.gifの説明

FROM句は、LOBFILEで使用されるすべてのディレクトリ・オブジェクトの名前をリストします。LOBFILEの名前のディレクトリ・オブジェクトに対して、フィールド名が指定された場合にのみ使用します。FROM句の目的は、初期化時に名前付きのディレクトリ・オブジェクトに許可されたアクセス権の種類を識別することにあります。フィールドの値に指定されたディレクトリ・オブジェクトが、リスト内のディレクトリ・オブジェクトではない場合、行は拒否されます。

CLOB属性は、LOBFILE内のデータがRAWデータではなく、文字データであることを示します。場合によって文字データは、データベース内にLOBを格納するために使用されるキャラクタ・セットに変換する必要があります。

CHARACTERSET属性は、LOBFILE内のデータのキャラクタ・セット名を含みます。

BLOB属性は、LOBFILE内のデータが生データであることを示します。

CLOBまたはBLOBのいずれも指定されない場合、CLOBであるとみなされます。文字LOBFILEに対してキャラクタ・セットが指定されない場合、データ・ファイルのキャラクタ・セットであるとみなされます。

例: ORACLE_LOADERを使用した外部表の作成およびロード

この項の手順では、ORACLE_LOADERアクセス・ドライバを使用した外部表の作成およびロードの例を示します。empという従来の表とemp_loadという外部表が定義されます。外部データは次に内部表にロードされます。

  1. .dat ファイルが次のとおりであるとします。

    56november, 15, 1980  baker             mary       alice     09/01/2004
    87december, 20, 1970  roper             lisa       marie     01/01/2002
    
  2. データ・ソースを含むデフォルトのディレクトリを設定して、それに対するアクセス権限を付与するには、次のSQL文を実行します。

    CREATE DIRECTORY def_dir1 AS '/usr/apps/datafiles';
    GRANT READ ON DIRECTORY ext_tab_dir TO SCOTT;
    
  3. 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);
    
  4. 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.
    
  5. 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.
    
  6. .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アクセス・ドライバのパラレル・ロードに関する考慮点

ORACLE_LOADERアクセス・ドライバでは、大きいデータ・ファイルを、個別に処理できるチャンクに分割します。

次のファイル、レコードおよびデータ特性によって、ファイルのパラレル処理が禁止されます。

  • 順次データ・ソース(テープ・ドライブ、パイプなど)

  • 文字の境界が文字列中の任意のバイトで始まり、境界を判断できないマルチバイト・キャラクタ・セットのデータ

    この制限事項は、1レコード当たりのバイト数が固定のデータ・ファイルには適用されません。

  • VAR形式のレコード

PARALLEL句の指定は、大量のデータを扱う場合にのみ有効です。

ORACLE_LOADERアクセス・ドライバを使用する際のパフォーマンスのヒント

パフォーマンスを監視する場合、最も重要なことは、ロードの経過時間の測定です。また、CPU使用量、メモリー使用量およびI/O率の測定も重要です。

並列度を増減することによって、パフォーマンスを変更できます。並列度は、データ・ファイルの処理に起動できるアクセス・ドライバの数を示します。並列度によって、リソース使用率を低くした遅いロードと、すべてのリソースを使用した速いロードを選択できます。アクセス・ドライバは、アクセス・ドライバ専用に使用するリソース量を判断できないため、自動的にはチューニングされません。

さらに考慮する必要があるのは、アクセス・ドライバで大きなI/Oバッファを使用すると、パフォーマンスが向上するという点です(バッファのサイズは、READSIZE句をアクセス・パラメータで使用して指定できます)。共有サーバーを使用するデータベースでは、アクセス・ドライバが使用するすべてのメモリーはSystem Global Area(SGA)から割り当てられます。そのため、共有サーバー上の外部表を使用する際には注意が必要です。

また、パフォーマンスは、日付キャッシュ機能を使用して向上できる場合もあります。ロード中に予測される一意の日付の数を指定するために日付キャッシュを使用すると、入力データ内に多数の重複する日付またはタイムスタンプ値が存在する場合に日付変換が実行される回数を減らすことができます。外部表で提供される日付キャッシュ機能は、SQL*Loaderで提供されるものと同じです。詳細は、「DATE_CACHE」を参照してください。

パフォーマンスを向上させるには、並列度の変更および日付キャッシュの使用に加えて、次のことを考慮してください。

  • 固定長レコードは、文字列で終了しているレコードより速く処理される。

  • 固定長フィールドは、デリミタ付きフィールドより速く処理される。

  • シングルバイト・キャラクタ・セットは、最も速く処理される。

  • 固定幅キャラクタ・セットは、可変幅キャラクタ・セットより速く処理される。

  • 可変幅キャラクタ・セットのバイト長セマンティクスは、文字長セマンティクスより早く処理される。

  • 1文字のレコード終了デリミタおよびフィールド・デリミタは、複数文字のデリミタより速く処理される。

  • キャラクタ・セットを変換するより、データ・ファイルのキャラクタ・セットをデータベースのキャラクタ・セットに一致させる方が速く処理される。

  • データ型を変換するより、データ・ファイルのデータ型をデータベースのデータ型に一致させる方が速く処理される。

  • 拒否された行を拒否ファイルに書き込まない場合は、オーバーヘッドが削減されるため、処理速度が速くなる。

  • 条件句(WHENNULLIFおよびDEFAULTIFを含む)を使用すると、処理速度が遅くなる。

  • アクセス・ドライバは、マルチスレッドを使用して作業をできるだけ簡素化します。

ORACLE_LOADERアクセス・ドライバ使用時の制限事項

この項では、ORACLE_LOADERアクセス・ドライバを使用する際に認識しておく必要がある制限事項について説明します。

  • ORACLE_LOADERアクセス・ドライバのアクセス・パラメータにSQL文字列を指定できません。解決策として、外部表を読み取る文のSELECT句にDECODE句を使用できます。また、DECODE句を使用する外部表のビューを作成して、外部表ではなくそのビューから選択することもできます。

  • 外部表では、文字列内のバックスラッシュ(\)の使用はサポートされていません。詳細は、「バックスラッシュ・エスケープ文字の使用」を参照してください。

  • 外部表アクセス・パラメータにおいて列名や表名などの識別子が指定される場合、特定の値はアクセス・パラメータ・パーサーによって予約語とみなされます。予約語を識別子として使用するには、二重引用符で囲む必要があります。

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

  • 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