デフォルト: NOT_USED
用途
EXTERNAL_TABLE
パラメータは、外部表オプションを使用してデータをロードするかどうかをSQL*Loaderに指定します。
構文および説明
EXTERNAL_TABLE=[NOT_USED | GENERATE_ONLY | EXECUTE]
指定可能な値は次のとおりです。
NOT_USED
: デフォルト値。従来型パス・モードまたはダイレクト・パス・モードのいずれかを使用して、ロードを行います。
GENERATE_ONLY
: 制御ファイルに記述されているとおり、SQL*Loaderログ・ファイル内の外部表を使用してロードを行うために必要なすべてのSQL文を書き込みます。これらのSQL文は、編集およびカスタマイズできます。実際のロードは、SQL*Loaderを使用せずに、SQL*Plusでこれらの文を実行して、後で行うことができます。
EXECUTE
: 外部表を使用してロードを行うために必要なSQL文を実行します。ただし、SQL文からエラーが返されると、ロードは停止します。SQL文は、実行されたとおりログ・ファイルに書き込まれます。つまり、SQL文からエラーが返されると、ロードに必要な残りのSQL文はログ・ファイルには書き込まれません。
SQL*Loader制御ファイルでEXTERNAL_TABLE
=EXECUTE
パラメータとSEQUENCE
パラメータの両方を使用すると、SQL*Loaderは、データベースの順序を作成し、その順序に従って表をロードした後、その順序を削除します。この方法でロードを実行すると、従来型またはダイレクト・パスによる方法でロードした場合とは異なる結果になります。(順序の作成方法の詳細は、『Oracle Database SQL言語リファレンス』のCREATE
SEQUENCE
に関する項を参照してください。)
注意:
EXTERNAL_TABLE
パラメータを指定すると、SQL*Loader制御ファイル内の日時データ型(TIMESTAMP
など)は自動的にCHAR
データ型に変換されて、外部表のdate_format_spec
句が使用されます。詳細は、「date_format_spec」を参照してください。
外部表オプションで、データベース内のディレクトリ・オブジェクトを使用して、すべての入力データ・ファイルがどこに格納されるか、および出力ファイル(不良ファイルや廃棄ファイルなど)がどこで作成されるかを指定します。データ・ファイルを含むディレクトリ・オブジェクトには、READ
アクセスが、出力ファイルが作成されるディレクトリ・オブジェクトには、WRITE
アクセスが必要です。データ・ファイルまたは出力ファイル格納用の既存のディレクトリ・オブジェクトがない場合は、SQL*LoaderでSQL文を生成して作成します。したがって、EXECUTE
オプションを指定する場合は、CREATE
ANY
DIRECTORY
権限が必要です。ロード処理の最後にディレクトリ・オブジェクトを削除する場合は、DROP
ANY
DIRECTORY
権限も必要です。
注意:
SQL*LoaderでEXTERNAL_TABLE=
EXECUTE
修飾子を指定すると、データのロードに使用可能な外部表が作成された後、INSERT
文が実行され、データがロードされます。外部表のすべてのファイルがディレクトリ・オブジェクト内に存在すると識別される必要があります。SQL*Loaderは、ユーザーがアクセス権限を所有している既存のディレクトリ・オブジェクトを使用します。ただし、SQL*Loaderにより一致するディレクトリ・オブジェクトが検出されない場合は、一時ディレクトリ・オブジェクトの作成が試行されます。新しいディレクトリ・オブジェクトを作成する権限を所有していない場合、この操作は正常に実行されません。
この問題を解決するには、EXTERNAL_TABLE=
GENERATE_ONLY
を使用して、SQL*Loaderで実行が試行されるSQL文を作成します。これらのSQL文を抽出し、参照するディレクトリ・オブジェクトを、アクセス権限を所有しているディレクトリ・オブジェクトに変更します。その後、これらのSQL文を実行します。
複数表のロードを行う場合は、SQL*Loaderで次の手順を実行します。
任意の表にロードされる入力データ・ファイルのすべてのフィールドを記述する表を、データベースに作成します。
INSERT
文を作成して、データの外部表記述からこの表をロードします。
制御ファイルのすべての表にINSERT
文を実行します。
実行例については、事例5にEXTERNAL_TABLE=GENERATE_ONLY
パラメータを追加して実行します。外部表に一意の名前を保証するため、SQL*Loaderではすべてのフィールド用に生成された名前を使用します。これは、フィールド名が制御ファイル内の異なる表の間で一意でないことがあるためです。
関連項目:
事例の使用方法の詳細は、「SQL*Loaderの事例」を参照してください
制限事項
SQL*Loaderを介して外部表からデータベース表にデータを挿入する場合、ユリウス日は使用できません。この問題を解決するには、次の例に示すとおり、TO_DATE
およびTO_CHAR
を使用してユリウス日書式を変換します。
TO_CHAR(TO_DATE(:COL1, 'MM-DD-YYYY'), 'J')
外部表からデータベース表にデータを挿入する場合、オブジェクト要素には組込み関数およびSQL文字列は使用できません。
例
EXTERNAL_TABLE=EXECUTE