Oracle 如何在sql加载器中使用to_number和nullif?
我在这里遇到了类似的日期问题(to_date和nullif的组合): 这很好地解决了 我的问题是,我的CSV文件中的数字字段可以有以下格式:999999999.99或只有一个点“.”表示空值 这是在工作:Oracle 如何在sql加载器中使用to_number和nullif?,oracle,sql-loader,Oracle,Sql Loader,我在这里遇到了类似的日期问题(to_date和nullif的组合): 这很好地解决了 我的问题是,我的CSV文件中的数字字段可以有以下格式:999999999.99或只有一个点“.”表示空值 这是在工作: MINQUANTITY "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')" 或 但当我尝试将两者结合起来时,不起作用: MINQUANTITY "TO_NUMBE
MINQUANTITY "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')"
或
但当我尝试将两者结合起来时,不起作用:
MINQUANTITY "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''') NULLIF :MINQUANTITY= '.'"
以下是错误日志:
Record 1: Rejected - Error on table MY_TABLE, column MINQUANTITY.
ORA-00917: missing comma
如何组合这些条件?您的
NULLIF
条件不应位于SQL字符串的双引号内;它需要放在第一位。发件人:
- SQL字符串出现在给定列的任何其他规范之后
- SQL字符串必须用双引号括起来
- SQL字符串在任何NULLIF或DEFAULTIF子句之后,但在日期掩码之前求值
MINQUANTITY NULLIF MINQUANTITY = '.'
"TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')"
(为了便于阅读,您可以分成两行,这两部分仍然适用于“MINQUANTITY”字段)
在日志中报告为:
MINQUANTITY NEXT * , CHARACTER
NULL if MINQUANTITY = 0X2e(character '.')
SQL string for column : "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')"
(您的NLS字符是否正确?这将
,
视为十进制分隔符,而您的问题表明您使用的是
。当然,只要值用双引号括起来,这两种方法都有效)。有效!谢谢对于NLS,你似乎也是对的。再次感谢。
MINQUANTITY NEXT * , CHARACTER
NULL if MINQUANTITY = 0X2e(character '.')
SQL string for column : "TO_NUMBER(:MINQUANTITY, '9999999999D999999', 'NLS_NUMERIC_CHARACTERS='',.''')"