field_definitions句では、FIELDSパラメータを使用してデータ・ファイルのフィールドに名前を付け、それらのレコード内での検索方法を指定します。
field_definitions句が省略された場合、次のことが想定されます。
フィールドは「,」で区切られる
フィールドのデータ型はCHARである
フィールドの最大長は255である
データ・ファイルのフィールドの順序は、外部表で定義されたフィールドの順序となる
空白はフィールドから切り捨てられない。
次に、アクセス・パラメータを含まずに作成する外部表の例を示します。その後に、外部表をロードするために使用できるデータ・ファイルのサンプルinfo.datを示します。
CREATE TABLE emp_load (first_name CHAR(15), last_name CHAR(20), year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_tab_dir LOCATION ('info.dat'));
Alvin,Tolliver,1976
Kenneth,Baer,1963
field_definitions句の構文は次のとおりです。
IGNORE_CHARS_AFTER_EOR
オプションのこのパラメータは、最後のエンドオブレコードの後、かつエンドオブファイルより前に、レコードの定義に一致しない不要な文字が見つかった場合、その文字を無視するように指定します。
次の4つの条件がすべて当てはまると、エラー・メッセージが外部表のログ・ファイルに書き込まれます。
IGNORE_CHARS_AFTER_EORパラメータが設定されているか、フィールドが自由書式可能になっている(自由書式可能とは、フィールドが可変長であるか、フィールドがデリミタまたは囲み文字で指定されていて可変長であるかのいずれかです)。
文字がファイル内の最後のエンドオブレコードの後にある。
アクセス・パラメータMISSING FIELD VALUES ARE NULLが設定されていない。
フィールドに絶対位置が設定されていない。
外部表のログ・ファイルに書き込まれるエラー・メッセージは次のとおりです。
KUP-04021: field formatting error for field Col1 KUP-04023: field start is after end of record KUP-04101: record 2 rejected in file /home/oracle/datafiles/example.dat
CSV
外部表でカンマ区切り値形式のファイルであるデータ・ファイルにアクセスするには、FIELDS CSV句を使用します。これによって、ファイルは、通常の改行文字列(たとえば、UNIXまたはLinuxオペレーティング・システムの場合は\n、Windowsオペレーティング・システムの場合は\nまたは\r\n)を含むストリーム・レコード形式のファイルであるとみなされます。データ値にはレコード終了記号含める(埋め込む)ことができます。FIELDS CSV句の構文は次のとおりです。
FIELDS CSV [WITH EMBEDDED | WITHOUT EMBEDDED] [TERMINATED BY ','] [OPTIONALLY ENCLOSED BY '"']
FIELDS CSV句の主なポイントは次のとおりです。
デフォルトでは、FIELDS CSV句を使用しません。
WITH EMBEDDEDおよびWITHOUT EMBEDDEDオプションでは、データにレコード終了記号が含まれている(埋め込まれている)かどうかを指定します。WITH EMBEDDEDオプションがデフォルトです。
WITH EMBEDDEDを使用する場合、埋込みのレコード終了記号は囲む必要があり、データ・ファイル内の並列度は外部表ロードでは無効になります。
TERMINATED BY ','およびOPTIONALLY ENCLOSED BY '"'オプションはデフォルトのため、指定する必要はありません。これらは別の終了記号や囲み文字で上書きできます。
CSV句を使用する場合、フィールド・レベルでのデリミタ指定は許可されず、区切ることが可能なデータ型のみ許可されます。区切ることが可能なデータ型には、CHAR、日時、期間および数値型EXTERNALが含まれます。
CSV句を指定する場合、TERMINATED BYおよびENCLOSED BY句は、フィールド・レベルでは使用できません。
CSV句を指定する場合、デフォルトの切捨て動作はLDRTRIMです。これを上書きするには、外部表の他の切捨てオプション(NOTRIM、LRTRIM、LTRIMまたはRTRIM)のいずれかを指定します。
CSV句は、IGNORE_CHARS_AFTER_EOR句の後で、delim_spec句の前に指定する必要があります。
delim_spec句
delim_spec句を使用して、レコード内のすべてのフィールドの終了位置を識別します。すべてのフィールドに指定されるdelim_specは、特定のフィールドに対してfield_list句の一部として上書きできます。構文の詳細は、「delim_spec」を参照してください。
trim_spec句
trim_spec句を使用して、すべての文字フィールドでデフォルトとして実行される空白の切捨てタイプを指定します。すべてのフィールドに指定されるtrim_spec句は、個々のフィールドに対してtrim_spec句を指定して上書きできます。構文の詳細は、「trim_spec」を参照してください。
ALL FIELDS OVERRIDE
ALL FIELDS OVERRIDE句では、アクセス・ドライバに対し、すべてのフィールドが存在し、それらが外部表の列と同じ順序であることを示します。特殊な定義が含まれるフィールドを指定するだけで済みます。この句は、オプションのtrim_spec句の後で、オプションのMISSING FIELD VALUES ARE NULL句の前に指定する必要があります。
次に、ALL FIELDS OVERRIDE句の使用例を示します。指定する必要のあるフィールドはHIREDATEのみで、これは日付書式マスクを必要とします。他のすべてのフィールドはデフォルト値を使用します。
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LDRTRIM ALL FIELDS OVERRIDE REJECT ROWS WITH ALL NULL FIELDS ( HIREDATE CHAR(20) DATE_FORMAT DATE MASK "DD-Month-YYYY" )
MISSING FIELD VALUES ARE NULL
MISSING FIELD VALUES ARE NULLは、位置が明示的に示されておらず、入力するのに十分なデータがないフィールドをNULLに設定します。詳細は、「MISSING FIELD VALUES ARE NULL」を参照してください。
REJECT ROWS WITH ALL NULL FIELDS
REJECT ROWS WITH ALL NULL FIELDSは、行内で参照されるすべてのフィールドがNULLの場合、その行が外部表にロードされないことを示します。このパラメータを指定しない場合、デフォルト値が使用され、すべてのフィールドがNULLの行が外部表にロードされます。このパラメータの設定は、「reject rows with all null fields」または「rows with all null fields are accepted」としてログ・ファイルに書き込まれます。
DATE_FORMAT
DATE_FORMAT句では、フィールド・レベルで日時書式マスクを一度指定することで、指定された独自のマスクのないそのタイプのすべてのフィールドにそれを適用できます。日時書式マスクは、オプションのREJECT ROWS WITH ALL NULL FIELDS句の後で、fields_list句の前に指定する必要があります。
DATE_FORMATは、日時データ型のDATE、TIME、TIME WITH TIME ZONE、TIMESTAMPおよびTIMESTAMP WITH TIME ZONEで指定できます。
次に、任意のDATE型フィールドにDD-Month-YYYYの日付マスクを適用するDATE_FORMAT句の使用例を示します。
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LDRTRIM
REJECT ROWS WITH ALL NULL FIELDS
DATE_FORMAT DATE MASK "DD-Month-YYYY"
(
EMPNO,
ENAME,
JOB,
MGR,
HIREDATE CHAR(20),
SAL,
COMM,
DEPTNO,
PROJNO,
ENTRYDATE CHAR(20)
)
NULLIF | NO NULLIF
NULLIF句は、すべての文字フィールド(CHAR、VARCHAR、VARCHARC、外部NUMBER、日時など)に適用されます。
構文は次のとおりです:
NULLIF {=|!=}{"char_string"|x'hex_string'|BLANKS}
フィールドに対する等号または不等号の指定を使用して一致した場合、フィールドはその行でNULLに設定されます。
char_stringおよびhex_stringは、一重引用符または二重引用符で囲む必要があります。
NULLIFは、フィールド・レベルで指定されると、このNULLIF句に優先します。
NULLIF句を適用しないフィールドがある場合、フィールド・レベルでNO NULLIFを指定できます(次の例を参照)。
NULLIF句は、オプションのREJECT ROWS WITH ALL NULL FIELDS句の後で、fields_list句の前に指定する必要があります。
次に、NULLIF句の使用例を示します。MGRフィールドは、NULLIF="NONE"句をそのフィールドに適用しないようにするNO NULLIFに設定されます。
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"' LDRTRIM REJECT ROWS WITH ALL NULL FIELDS NULLIF = "NONE" ( EMPNO, ENAME, JOB, MGR )
field_list句
field_list句を使用して、データ・ファイルのフィールドおよびそのデータ型を識別します。構文の詳細は、「field_list」を参照してください。