delim_spec
句を使用して、フィールドの終了位置(ENCLOSED
BY
を指定する場合は、開始位置)を検索します。構文は次のとおりです。
ENCLOSED
BY
を指定すると、アクセス・ドライバで、レコードの現在の位置から最初のデリミタまでの間のすべての空白がスキップされます。現在の位置と最初のデリミタの間のすべての空白が無視されます。次に、アクセス・ドライバでは、2番目の囲みデリミタが検索されます(または、2番目のデリミタが指定されていない場合は、最初のデリミタがもう1度検索されます)。これら2つのデリミタの間にあるすべての文字がフィールド部分とみなされます。
TERMINATED
BY
string
をENCLOSED
BY
句で指定する場合、終了記号文字列は、2番目の囲みデリミタの直後に置く必要があります。2番目の囲みデリミタと終了デリミタの間の空白はスキップされます。2つのデリミタの間で空白以外の文字が検索される場合、正しく書式化されていないため行が拒否されます。
ENCLOSED
BY
句を使用せずにTERMINATED
BY
を指定する場合、レコードの現在の位置と次に検索される終了記号文字列の間にあるすべての文字がフィールド部分とみなされます。
OPTIONALLY
を指定する場合は、TERMINATED
BY
も指定する必要があります。OPTIONALLY
パラメータによって、ENCLOSED
BY
デリミタは、両方存在するかまたは両方存在しないかのいずれかであることが示されます。終了デリミタは、ENCLOSED
BY
デリミタの有無にかかわらず存在する必要があります。OPTIONALLY
を指定する場合、アクセス・ドライバは、最初の空白以外の文字までのすべての空白をスキップします。最初の空白以外の文字が検索されると、アクセス・ドライバは、現在の位置に最初の囲みデリミタが含まれているかどうかを確認します。含まれている場合は、アクセス・ドライバによって2番目の囲み文字列が検索され、最初の囲みデリミタと2番目の囲みデリミタの間のすべての文字がフィールド部分とみなされます。終了デリミタは、2番目の囲みデリミタの直後に置く必要があります(2番目の囲みデリミタと終了デリミタの間にオプションで空白を置くことも可能)。最初の空白以外の文字が最初の囲み文字列ではない場合、アクセス・ドライバは終了デリミタを検索します。この場合、先頭の空白は切り捨てられます。
関連項目:
アクセス・ドライバのデフォルトの切捨て動作の詳細は、表10-5を参照してください。LTRIM
およびRTRIM
を使用すると、この動作を変更できます。
デリミタが検出された後、レコードの現在の位置は、フィールドの最後のデリミタの後に設定されます。TERMINATED
BY
WHITESPACE
を指定した場合、レコードの現在の位置は、フィールドの後に続くすべての空白の後に設定されます。
レコードの最後のフィールドで終了記号が欠落している場合は、エラーではありません。アクセス・ドライバは、終了記号が検出された場合と同様に処理を行います。2番目の囲みデリミタが欠落している場合は、エラーとなります。
2番目の囲みに使用される文字列は、2番目の囲みを2回続けることによって、データ・フィールドに含むことができます。たとえば、フィールドが一重引用符で囲まれる場合、次の例のdon'tという単語で示すような方法で一重引用符を2つ並べて指定することによって、フィールドに一重引用符を含むことができます。
'I don''t like green eggs and ham'
囲みデリミタを使用せずに、データ・フィールドの終了文字列を引用符で囲む方法はありません。フィールドに終了デリミタを含むことができるのは、フィールド・パーサーが囲みデリミタを検出するまで終了デリミタを検索しないためです。
通常、1文字の文字列は、複数文字の文字列より速く指定できます。また、固定幅キャラクタ・セットのデータは、可変幅のキャラクタ・セットよりも速く検索できます。
注意:
外部表では、文字列内のバックスラッシュ(\)の使用はサポートされていません。