SQL*loader infile替换函数

SQL*loader infile replace function

我正在尝试更改 SQL*loader 文件以用点替换十进制数字中的逗号。

加载程序数据文件的外观

Pamatstudijas,Lauksaimniecibas,4,16.01.2006,70,"5,38"

我的控制文件

load data
 infile 'C:\Users\Students\Documents\ricardshercbergs_itia\izmaksas1.dat'
 into table kartoteka
 fields terminated by "," Optionally Enclosed By '"'
 TRAILING NULLCOLS
 (stud_veids char, 
fakultate char, 
kurss Integer External, 
izmaksas_datums date 'dd.mm.yyyy',
stipendija Integer External,
kompensacija  "REPLACE (:kompensacija,',','.')" Decimal External ,
nauda_kopa ":stipendija+:kompensacija")

这:kompensacija "REPLACE (:kompensacija,',','.')" Decimal External , 没有像我预期的那样工作。我收到错误:

SQL*Loader-350: Syntax error at line 11.
Expecting "," or ")", found keyword decimal.
kompensacija  "REPLACE (:kompensacija,',','.')" Decimal External ,

根据 example control file in the documentation 数据类型的定义出现在列转换之前,即您的规范应该是:

kompensacija  Decimal External "REPLACE (:kompensacija,',','.')" 

您可能正在使用 REPLACE() 来切换哪个字符是小数点,哪个字符是千位分隔符。如果是这种情况,您可以使用 TO_NUMBER,这会让您更清楚地知道您在做什么,如果无法进行转换,将会失败并显示正确的错误:

kompensacija decimal external "to_number(:kompensacija, '99D99', 'NLS_NUMERIC_CHARACTERS = '',.''')"