2014-01-30 52 views
0

我想用货币符号加载一个csv文件,使用SQL * Loader。符号'£'被替换为'#',符号'€'被替换为NULL。使用SQL * Loader加载货币符号

不知道我是否应该调整控制文件中的一些设置?

这里是从价值观NLS_DATABASE_PARAMETERS:

 
NLS_NCHAR_CHARACTERSET = AL16UTF16 
NLS_CHARACTERSET = AL32UTF8 

任何指针将有很大的帮助。 csv文件的

提取物 -

id,currency 
1234,£ 
5678,€ 

货币的列的数据类型是NVARCHAR2(10)。

这里的CTL文件 -

OPTIONS(skip=1) 
LOAD DATA 
TRUNCATE 
INTO TABLE schema_name.table_name 
FIELDS TERMINATED BY "," 
OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
(
filler1 filler, 
filler2 filler, 
Id INTEGER EXTERNAL, 
Currency CHAR "TRIM(:Currency)" 
) 
+0

请参考问题,我修改了它,使其具有csv和ctl样本以及数据类型。 – KLeonine

+2

使用什么字符集编码的CSV文件? –

+0

不确定,客户端发送了xlsx,我将这些内容复制粘贴到一个新文件中(使用MS Excel)并将其保存为逗号分隔(* .csv)文件。我面临的另一个问题是,每行的末尾都会添加CR和LF。数据加载到oracle表后,我可以用NULL替换它们。 – KLeonine

回答

1

我想这是一个字符集问题。

您是否将sqlloader文件的字符集设置为UTF8?

CHARACTERSET UTF8 

另外,文件本身是UTF8编码吗?

+0

CHARACTERSET参数用于[数据文件]的字符集(http://docs.oracle.com/cd/E11882_01/server.112/e22490/ldr_control_file.htm #SUTIL10870)...所以这只有在数据文件实际上是UTF8时才有用。根据我所猜测的问题来判断它不是_ ... – Ben

+0

好吧。只是一个猜测。已经看到这种问题很多。将检查出来并回复给你。 –

+0

所以这是文件编码。很高兴你发现了这个问题。 –

1

感谢贾斯汀和帕特里克指针!

该文件不是UTF-8编码的。我将文件转换为UTF-8编码,它工作!

对于那些不知道如何使用Notepad ++来转换文件编码的人(像我一样,我刚刚学会了如何做): 在Notepad ++中创建一个新文件 - >转到编码 - >使用UTF- 8 - >复制 - 粘贴内容 - >将文件保存为.csv