SQL * loader infile替换函数

时间:2017-12-27 09:29:32

标签: oracle sql-loader

我正在尝试更改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 ,

1 个答案:

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