Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在sql加载器中使用to_number和nullif?_Oracle_Sql Loader - Fatal编程技术网

Oracle 如何在sql加载器中使用to_number和nullif?

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

我在这里遇到了类似的日期问题(to_date和nullif的组合):

这很好地解决了

我的问题是,我的CSV文件中的数字字段可以有以下格式:999999999.99或只有一个点“.”表示空值

这是在工作:

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='',.''')"