空白、タブおよびその他の印字されない文字(改行、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
後続の空白があるかどうかは、表中の他の項目に示すとおり、現行のフィールドの指定によって異なります。
この項の残りの部分では、空白の切捨てに関する次の項目について説明します。