例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
としてロードされます。