SQL * loader infile替换函数

问题描述 投票:0回答:1

我正在尝试更改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 ,
oracle sql-loader
1个回答
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 = '',.''')" 
© www.soinside.com 2019 - 2024. All rights reserved.