PL / SQL多次应用相同的函数

时间:2015-12-11 14:23:07

标签: oracle plsql

现有Oracle数据库存在编码问题。从Java方面,我应用这些并修复它:

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

但是我想申请后续替换。我该如何链接它们?

2 个答案:

答案 0 :(得分:0)

您可以使用Oracle CONVERT函数将数据转换为数据库过程本身内部的正确字符集(与您的JAVA字符集兼容)。

那应该为你处理所有案件。

答案 1 :(得分:0)

假设您的数据库字符集为AL32UTF8,您看到的格式错误的字符源于8位字符集编码(可能是iso-8859-9 [土耳其语])重复转换为utf中的unicode -8表示。当然,这些转换中的第二个错误地应用于构成数据的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映射是暴力的。由于结果仍然是数据库字符集中的有效表示形式,因此简单的重新转换将提供结果。