OPTIONALLY ENCLOSED BY句およびTERMINATED BY句を使用するフィールドの場合は、次の処理が行われます。
フィールドの先頭に空白がある場合は、その空白がすべてスキップされます。
最初に検出された空白以外の文字が、最初のOPTIONALLY ENCLOSED BYデリミタに一致する文字列の先頭であるかどうかがパーサーによって確認されます。そうでない場合に、OPTIONALLY ENCLOSED BYデリミタがデータ内に存在しないと、フィールドの現在の位置から最初のTERMINATED BYデリミタまでがフィールドのデータとして読み込まれます(デリミタ自体は読み込まれません)。TERMINATED BYデリミタが最初の列位置にある場合、そのフィールドはNULLとなります。TERMINATED BYデリミタが検出される前にレコードの終わりが検出された場合は、レコードの末尾までのすべてのデータがフィールドの要素とみなされます。
最初のOPTIONALLY ENCLOSED BYデリミタが検出された場合は、2番目のOPTIONALLY ENCLOSED BYデリミタの検索が開始されます。
2番目のOPTIONALLY ENCLOSED BYデリミタが2つ隣合せで検出された場合は、1つのデリミタが記述されていると解釈した上で、フィールドのデータ要素に含まれます。引き続き、2番目のOPTIONALLY ENCLOSED BYデリミタが検索されます。
2番目のOPTIONALLY ENCLOSED BYデリミタが検出される前にレコードの終わりが検出された場合、その行は拒否されます。
OPTIONALLY ENCLOSED BYデリミタがデータ内に存在する場合は、パーサーによりTERMINATED BYデリミタが検索されます。TERMINATED BYデリミタがWHITESPACE以外の場合、2番目のOPTIONALLY ENCLOSED BYデリミタの最後とTERMINATED BYデリミタの間にある空白はスキップされます。
TERMINATED BYデリミタが検出される前にレコードの終わりが検出された場合でも、行は拒否されません。
注意:
空白文字をTERMINATED BYデリミタとして指定し、OPTIONALLY ENCLOSED BYも使用する場合は注意が必要です。SQL*Loaderでは、OPTIONALLY ENCLOSED BYデリミタを検索するときに、先頭の空白が取り除かれます。2つのTERMINATED BYデリミタがレコードの途中に隣り合って含まれている場合(通常は、レコードのフィールドをNULLに設定する目的でこのように記述します)、最初のTERMINATED BYデリミタの空白を使用してフィールドが終了されますが、残りの空白は、次のフィールドの先頭の空白とみなされ、次のフィールドのTERMINATED BYデリミタとはみなされません。NULL値をロードする場合は、データ内にENCLOSED BYデリミタを含める必要があります。