空白、タブおよびその他の印字されない文字(改行、LFなど)が空白を構成します。先頭の空白は、フィールドの開始位置にあります。後続の空白は、フィールドの終了位置にあります。フィールドの指定方法にもよりますが、空白は、フィールドのデータベースへの挿入時に、データの一部として含めることも切り捨てることもできます。これについて、図10-1に示します。この図では、2つのCHARフィールドがデータ・レコードに定義されています。
フィールド指定は制御ファイルに含まれています。制御ファイルのCHAR指定は、データベースのCHAR指定と同じではありません。制御ファイル内でCHARとして定義されたデータ・フィールドは、SQL*Loaderに行挿入の作成方法を指定するのみです。Oracle Databaseで必要な変換が行われ、データベースのCHAR、VARCHAR2、NCHAR、NVARCHAR2、NUMBERまたはDATE列にデータを挿入できるようになります。
デフォルトでは、SQL*Loaderを使用してCHARデータから後続の空白を削除した後、このデータをデータベースに渡します。その後、図10-1に示すとおり、フィールド1とフィールド2は3バイトのフィールドとしてデータベースに渡されます。ただし、データを表に挿入する場合は処理が異なります。
列1は、データベース内で長さ5の固定長CHAR列として定義されます。そのため、データ(aaa)は5バイトの幅を保持したまま、その列で左揃えにされます。余った右側の部分は空白で埋められます。一方、列2は、最大長5バイトの可変長フィールドとして定義されています。その列(bbb)のデータも左揃えにされますが、長さは3バイトのままです。
表10-5に、PRESERVE BLANKSが指定されていない場合に空白が入力データ・フィールドから切り捨てられるケースおよびその処理方法を示します。空白の切捨てを回避する方法については、「空白の切捨てに対するPRESERVE BLANKSオプションの影響」を参照してください。
表10-5 空白の切捨てに関する動作のサマリー
| 指定 | データ | 結果 | 先頭の空白の存在(1) | 後続の空白の存在1 |
|---|---|---|---|---|
サイズ指定あり |
__aa__ |
__aa |
あり |
なし |
終了デリミタ |
__aa__, |
__aa__ |
あり |
あり脚注2 |
囲みデリミタ |
"__aa__" |
__aa__ |
あり |
あり |
終了と囲み |
"__aa__", |
__aa__ |
あり |
あり |
オプションの囲み(あり) |
"__aa__", |
__aa__ |
あり |
あり |
オプションの囲み(なし) |
__aa__, |
aa__ |
なし |
あり |
前のフィールドが空白で区切られている場合 |
__aa__ |
aa脚注3 |
なし |
脚注 1 空白のみのフィールドが切り捨てられた場合、その値はNULLになります。
脚注2
空白で終了するフィールドを除きます。
脚注3
後続の空白があるかどうかは、表中の他の項目に示すとおり、現行のフィールドの指定によって異なります。
この項の残りの部分では、空白の切捨てに関する次の項目について説明します。