可以在sql loader中使用IF CLAUSE吗?我写了一段代码,但它给了我错误。
INTO TABLE TF_RTB9_DTL
WHEN ((01) = 'D') OR (if
(POA_COU_VAL = 0)
then MAST_POA_ID = null
end if)
FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
TRANS_TYP POSITION(3),
BO_ID ,
NAME ,
MID_NAM ,
LAS_NAM ,
PAN ,
NAM_FIR_JOINT ,
MIDD_NAM_FIR_JOINT,
LAS_NAM_FIR_JOINT ,
PAN_FIR_JOINT ,
NAM_SEC_JOINT ,
MIDD_NAM_SEC_JOINT,
LAS_NAM_SEC_JOINT ,
PAN_SEC_JOINT ,
ADD_LIN_1 ,
ADD_LIN_2 ,
ADD_LIN_3,
CITY ,
STATE ,
COUNTRY ,
PIN_COD ,
PERM_ADD_LIN_1 ,
PERM_ADD_LIN_2 ,
PERM_ADD_LIN_3 ,
PERM_CITY ,
PERM_STATE ,
PERM_COUNTRY ,
PERM_PIN_COD ,
POA_COU_VAL ,
MAST_POA_ID ,
TRANS_ID
)
如果POA_COU_VAL为0,则POA_COU_VAL必须为null,并且应在TRANS_ID中输入下一个值。我怎样才能做到这一点?
答案 0 :(得分:1)
SQL * Loader WHEN
子句只有有限的布尔运算符,尤其缺少OR
(参见http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_control_file.htm#i1005657)。
如果 使用SQL * Loader(并且无法像APC建议的那样切换到外部表),则需要将INTO
部分乘以{{1}的每个部分1}}子句。
例如:
OR
或者考虑使用INTO TABLE TF_RTB9_DTL
WHEN (01) = 'D'
FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
TRANS_TYP POSITION(3),
...
...
MAST_POA_ID
)
INTO TABLE TF_RTB9_DTL
WHEN POA_COU_VAL = '0'
FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
TRANS_TYP POSITION(3),
...
...
MAST_POA_ID "NULL"
)
函数(http://docs.oracle.com/cd/B19306_01/server.102/b14215/ldr_field_list.htm#i1009345)
NULLIF
SQL * Loader是一个棘手的工具,如果你能够使用外部表,你最有可能获得更快的结果(文件必须在Oracle Server机器上,而SQL * Loader能够连接到任何Oracle实例)。