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」を参照してください。