データを外部表から、または外部表に移動すると、次の3つの場所にある同一の列が、異なるデータ型を持つ可能性があります。
データベース: データが外部表にアンロードされる際のソースであり、データが外部表からロードされるときのロード先です。
外部表: データが外部表にアンロードされると、外部表内の列のデータ型と一致するよう、データベースからのデータは必要に応じて変換されます。また、SQL演算子をソース・データに適用して、データを外部表に移動する前にデータ型を変更できます。同様に、外部表からデータベースにロードすると、外部表からのデータはデータベース内の列のデータ型と一致するよう自動的に変換されます。さらに、外部表から選択しているSQL文内のSQL演算子を使用して、他の変換も実行できます。より高いパフォーマンスを得るには、外部表のデータ型を、データベースのデータ型と一致させます。
データ・ファイル: データを外部表にアンロードすると、データ・ファイルのフィールドのデータ型は外部表のフィールドのデータ型と完全に一致します。ただし、外部表からデータをロードすると、データ・ファイルのデータ型が外部表のデータ型と一致しない場合があります。その場合、データ・ファイルからのデータは、外部表のデータ型と一致するよう変換されます。列の変換時にエラーが発生した場合、その列を含むレコードはロードされません。より高いパフォーマンスを得るには、データ・ファイルのデータ型を、外部表のデータ型と一致させます。
データ・ファイルと外部表の間で変換エラーが発生すると、エラーの発生した行は無視されます。変換エラーおよび制約違反を含む、外部表とデータベース内の列でエラーが発生すると、操作全体が正常に完了されないまま終了します。
データが外部表にアンロードされる際に、ソース表内の列のデータ型が外部表の列のデータ型と一致していない場合、データが変換されます。変換エラーが発生した場合、その時点までに処理されたすべての行がデータ・ファイルに含まれず、データ・ファイルの読取りができなくなる場合があります。変換エラーによって操作が失敗する問題を回避するには、外部表の列のデータ型をデータベースの列のデータ型と一致させます。ただし、外部表はすべてのデータ型をサポートするわけではないため、必ず成功するとはかぎりません。そのような場合、ソース表でサポートされていないデータ型を、外部表でサポートするデータ型に変換する必要があります。たとえば、LONG_TAB
という名前のソース表にLONG
列がある場合、作成される外部表LONG_TAB_XT
の対応する列はCLOB
である必要があり、外部表を移入するために使用したSELECT
副問合せは、列をロードするためにTO_LOB
演算子を使用する必要があります。
CREATE TABLE LONG_TAB_XT (LONG_COL CLOB) ORGANIZATION EXTERNAL...SELECT TO_LOB(LONG_COL) FROM LONG_TAB;
注意:
Oracle Database 12cリリース1 (12.1)から、Oracle DatabaseのVARCHAR2
、NVARCHAR2
およびRAW
データ型の最大サイズが32KBに増加しました(COMPATIBLE
初期化パラメータが12.0以上に設定され、MAX_STRING_SIZE
初期化パラメータがEXTENDED
に設定されている場合)。外部表機能では、この新しい最大サイズがサポートされます。