2

我正在通过 SQL Loader 将数据集加载到 oracle 数据库中。文件如下所示
ctl

OPTIONS (DIRECT=TRUE)  
LOAD DATA   
CHARACTERSET WE8MSWIN1252   
INFILE test.csv  
 TRUNCATE  
 CONTINUEIF NEXT(1:1) = '#'  
 INTO TABLE FIETSKNOOPPUNTEN_A  
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '$$'   
TRAILING NULLCOLS   
(CODE,  
STREET,  
MUNICIPALITY,  
X,  
Y)

记录如下所示:

70.00|Hogeweg|Aardenburg|18370.00|366787.00

使用 SQL Loader 加载所有记录并且不会发生错误。忽略所有小数位,但也忽略第一列的第一个字符。在这种情况下,数据库显示该记录的代码为 0 而不是 70。当我在 csv 文件中的记录前面放置一个空格时,一切正常。
我已经尝试了几件事,例如通过 MS Access 重新创建文件,删除文件中的OPTIONSandCHARCACTERSET子句ctl,但我现在卡住了。

有任何想法吗?谢谢。

4

2 回答 2

4

我很确定第一个字符用于评估您的CONTINUEIF子句。它在每一行上进行评估,并且第一个字符专门用于此子句。

据推测,您没有使用由CONTINUEIF(将多个不同的行动态连接到单个逻辑记录)启用的功能。删除此子句应该可以解决您跳过第一个字符的问题。

于 2013-03-29T14:27:45.877 回答
0

我想知道是否是使用 CONTINUEIF NEXT(1:1) = '#' 导致了这种情况。如果 SQL*Loader 正在检查第一个字符是否为 #,那么它是否会从第二个字符继续?尝试将其更改为 CONTINUEIF NEXT PRESERVE (1:1) = '#'

于 2013-03-29T14:27:53.570 回答