2015-12-11 89 views
1

現有Oracle數據庫存在編碼問題。從Java方面,我應用這些並修復它:PL/SQL多次應用相同的函數

textToEscape = textToEscape.replace(/ö/g, 'ö'); 
textToEscape = textToEscape.replace(/ç/g, 'ç'); 
textToEscape = textToEscape.replace(/ü/g, 'ü'); 
textToEscape = textToEscape.replace(/ÅŸ/g, 'ş'); 
textToEscape = textToEscape.replace(/Ä/g, 'ğ'); 

有一個從數據庫中檢索數據的過程。我想寫一個函數並在其中應用替換序列。我發現鏈接:

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions134.htm

但是我想申請隨之而來的內容替換。我如何鏈接它們?

回答

0

可以使用Oracle CONVERT功能數據轉換成正確的字符集的數據庫程序本身內(與你的JAVA字符集兼容)轉換。

這應該處理所有情況下爲您服務。

+0

轉換爲'WE8ISO8859P1'應該可以工作,但不能。 – kamaci

0

假設數據庫字符集是AL32UTF8,你看到從一個8位的字符集編碼的重複轉換幹畸形字符(大概ISO-8859-9 [土耳其])來在UTF-8表示的Unicode 。當然,這些轉換中的第二個轉換錯誤地應用於構成數據的valis utf表示的字節序列。

您可以使用utl_raw包在數據庫中逆轉這種趨勢。說tab.col包含您的數據,以下聲明糾正它。

update tab set col = utl_raw.cast_to_varchar2 (utl_raw.convert (utl_raw.cast_to_raw (col), 'WE8ISO8859P9', 'AL32UTF8')); 

的強制轉換重新標記的字符數據,其有效地允許在底層八位位組(字節)序列操作的類型。在這個級別上,eroneus utf-8映射被忽略了。由於結果仍然是數據庫字符集中的有效表示形式,因此可以通過簡單的重新投射來實現結果。