例10-2から例10-5に、異なる条件でWHEN句、NULLIF句およびDEFAULTIF句を使用した場合の結果を示します。これらの例では、空白またはスペースはピリオド(.)で示されています。col1およびcol2は、データベースのVARCHAR2(5)列です。
例10-2 DEFAULTIF句の無評価
制御ファイルが次のように指定されています。
(col1 POSITION (1:5), col2 POSITION (6:8) CHAR INTEGER EXTERNAL DEFAULTIF col1 = 'aname')
データ・ファイルには次の情報が格納されています。
aname...
例10-2では、行のcol1がanameと評価され、col2が長さが0(「...」ですが、後続の空白は位置フィールドでは切り捨てられます)であるNULLと評価されます。
SQL*Loaderでcol2にロードされた最終値が確認される場合、WHEN句およびNULLIF句は評価されません。フィールド長(フィールド評価の結果、0と評価された長さ)が確認されます。したがって、SQL*Loaderでは、col2の最終値にNULLが設定されます。DEFAULTIF句は評価されず、行はcol1の場合はaname、col2の場合はNULLとしてロードされます。
例10-3 DEFAULTIF句の評価
制御ファイルが次のように指定されています。
. . . PRESERVE BLANKS . . . (col1 POSITION (1:5), col2 POSITION (6:8) INTEGER EXTERNAL DEFAULTIF col1 = 'aname'
データ・ファイルには次の情報が格納されています。
aname...
例10-3では、行のcol1が再度anameと評価されます。col2は、PRESERVE BLANKSが指定された場合、後続の空白が切り捨てられないため、「...」と評価されます。
SQL*Loaderでcol2にロードされた最終値が確認される場合、WHEN句およびNULLIF句は評価されません。0でなく3と評価されたフィールド評価からフィールド長が確認されます。
次に、SQL*LoaderではDEFAULTIF句が評価されます。col1がanameでanameと同じであるため、真と評価されます。
col2は数値フィールドであるため、SQL*Loaderではcol2の最終値に0が設定されます。行は、col1の場合は「aname」、col2の場合は0としてロードされます。
例10-4 DEFAULTIF句を使用した位置の指定
制御ファイルが次のように指定されています。
(col1 POSITION (1:5), col2 POSITION (6:8) INTEGER EXTERNAL DEFAULTIF (1:5) = BLANKS)
データ・ファイルには次の情報が格納されています。
.....123
例10-4では、行のcol1が長さが0(...ですが、後続の空白は切り捨てられます)であるNULLと評価されます。col2は、123と評価されます。
SQL*Loaderでcol2にロードされる最終値が設定される場合、WHEN句およびNULLIF句は評価されません。0でなく3と評価されたフィールド評価からフィールド長が確認されます。
次に、SQL*LoaderではDEFAULTIF句が評価されます。.....である(1:5)を、真と評価されているBLANKSと比較されます。したがって、col2が数値フィールド(integer EXTERNALは数値)のため、SQL*Loaderではcol2の最終値に「0」が設定されます。行は、col1の場合はNULL、col2の場合は0としてロードされます。
例10-5 DEFAULTIF句を使用したフィールド名の指定
制御ファイルが次のように指定されています。
(col1 POSITION (1:5), col2 POSITION(6:8) INTEGER EXTERNAL DEFAULTIF col1 = BLANKS)
データ・ファイルには次の情報が格納されています。
.....123
例10-5では、行のcol1が長さが0(...ですが、後続の空白は切り捨てられます)であるNULLと評価されます。col2は、123と評価されます。
SQL*Loaderでcol2の最終値が確認される場合、WHEN句およびNULLIF句は評価されません。0でなく3と評価されたフィールド評価からフィールド長が確認されます。
次に、SQL*LoaderではDEFAULTIF句が評価されます。評価の一部として、col1のフィールド評価がNULLであることが確認されます。NULLのため、DEFAULTIF句は偽と評価されます。したがって、SQL*Loaderではcol2の最終値に、フィールド評価の元の値である123が設定されます。行は、col1の場合はNULL、col2の場合は123としてロードされます。