2014-01-30 77 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