制御ファイルの定義で指定したフィールドの数が、実際にレコード中に存在するフィールドより多い場合、残りの(指定された余分の)列にNULL値を設定するか、またはエラーを出力するかがSQL*Loaderによって判断されます。
制御ファイルの定義でフィールドの開始位置として論理レコードの終了位置よりも後の位置が明示的に指定されている場合、SQL*Loaderによって、このフィールドにNULL値が設定されます。フィールドが(次に示す例の中のdname
およびloc
のように)相対位置に定義されていて、そのフィールドが現れる前にレコードのデータが終わった場合は、SQL*LoaderによってこのフィールドにNULL値が設定されるか、またはエラーが出力されます。SQL*Loaderによる処理は、TRAILING NULLCOLS
句(次の構文図を参照)を指定しているかどうかによって決まります。
TRAILING
NULLCOLS
句を使用すると、相対位置で指定した列がレコード中に存在しない場合、その列の値はNULLとして処理されます。
たとえば、次のようなデータについて考えます。
10 Accounting
このデータが次の制御ファイルで読み込まれ、そのレコードはdname
の後で終了するとします。
INTO TABLE dept TRAILING NULLCOLS ( deptno CHAR TERMINATED BY " ", dname CHAR TERMINATED BY WHITESPACE, loc CHAR TERMINATED BY WHITESPACE )
この場合、その後のloc
フィールドにはNULL値が設定されています。この例でTRAILING NULLCOLS
句を指定しなかった場合は、データ欠落のためエラーとなります。
関連項目:
TRAILING NULLCOLS
の使用例は、「事例7: 書式化されたレポートからのデータの抽出」(事例の使用方法については、「SQL*Loaderの事例」)を参照してください