プライマリ・コンテンツに移動
Oracle® Databaseユーティリティ
12cリリース1 (12.1.0.2)
B71303-09
目次へ移動
目次
索引へ移動
索引

前
次

TERMINATED BYとともにOPTIONALLY ENCLOSED BYを使用するフィールド

OPTIONALLY ENCLOSED BY句およびTERMINATED BY句を使用するフィールドの場合は、次の処理が行われます。

  1. フィールドの先頭に空白がある場合は、その空白がすべてスキップされます。

  2. 最初に検出された空白以外の文字が、最初のOPTIONALLY ENCLOSED BYデリミタに一致する文字列の先頭であるかどうかがパーサーによって確認されます。そうでない場合に、OPTIONALLY ENCLOSED BYデリミタがデータ内に存在しないと、フィールドの現在の位置から最初のTERMINATED BYデリミタまでがフィールドのデータとして読み込まれます(デリミタ自体は読み込まれません)。TERMINATED BYデリミタが最初の列位置にある場合、そのフィールドはNULLとなります。TERMINATED BYデリミタが検出される前にレコードの終わりが検出された場合は、レコードの末尾までのすべてのデータがフィールドの要素とみなされます。

  3. 最初のOPTIONALLY ENCLOSED BYデリミタが検出された場合は、2番目のOPTIONALLY ENCLOSED BYデリミタの検索が開始されます。

  4. 2番目のOPTIONALLY ENCLOSED BYデリミタが2つ隣合せで検出された場合は、1つのデリミタが記述されていると解釈した上で、フィールドのデータ要素に含まれます。引き続き、2番目のOPTIONALLY ENCLOSED BYデリミタが検索されます。

  5. 2番目のOPTIONALLY ENCLOSED BYデリミタが検出される前にレコードの終わりが検出された場合、その行は拒否されます。

  6. OPTIONALLY ENCLOSED BYデリミタデータ内に存在する場合は、パーサーによりTERMINATED BYデリミタが検索されます。TERMINATED BYデリミタがWHITESPACE以外の場合、2番目のOPTIONALLY ENCLOSED BYデリミタの最後とTERMINATED BYデリミタの間にある空白はスキップされます。

  7. TERMINATED BYデリミタが検出される前にレコードの終わりが検出された場合でも、行は拒否されません

注意:

空白文字をTERMINATED BYデリミタとして指定し、OPTIONALLY ENCLOSED BYも使用する場合は注意が必要です。SQL*Loaderでは、OPTIONALLY ENCLOSED BYデリミタを検索するときに、先頭の空白が取り除かれます。2つのTERMINATED BYデリミタがレコードの途中に隣り合って含まれている場合(通常は、レコードのフィールドをNULLに設定する目的でこのように記述します)、最初のTERMINATED BYデリミタの空白を使用してフィールドが終了されますが、残りの空白は、次のフィールドの先頭の空白とみなされ、次のフィールドのTERMINATED BYデリミタとはみなされません。NULL値をロードする場合は、データ内にENCLOSED BYデリミタを含める必要があります。