我正在尝试更改SQL *加载程序文件,用点替换十进制数字的逗号。
加载程序数据文件的外观
Pamatstudijas,Lauksaimniecibas,4,16.01.2006,70,"5,38"
我的控制文件
load data
infile 'C:\Users\Students\Documents\ricardshercbergs_itia\12\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 ,
答案 0 :(得分:1)
根据example control file in the documentation数据类型的定义出现在列的转换之前,即您的规范应该是:
kompensacija Decimal External "REPLACE (:kompensacija,',','.')"
看起来您可能正在使用REPLACE()
来切换哪个字符是小数点,哪个是千位分隔符。如果是这种情况,您可以使用TO_NUMBER
,这样可以更清楚地显示您正在执行的操作,如果无法进行转换,则会因错误而失败:
kompensacija decimal external "to_number(:kompensacija, '99D99', 'NLS_NUMERIC_CHARACTERS = '',.''')"