我无法将哈萨克语中的数据从一个数据库Oracle转换为另一数据库。源数据库具有AL32UTF8 NLS_CHARACTERSET(根据v $ nls_parameters),目标数据库具有CL8MSWIN1251 如何解决呢? 我将原始信息插入了informatica
答案 0 :(得分:0)
根据HOW TO: Set the Oracle NLS_LANG environment variable您
将托管Informatica Services的计算机上的NLS_LANG环境变量设置为Oracle Client OS使用的值。
对我来说,不清楚“ Oracle客户端操作系统使用的值”是什么意思。
如果Informatica在Linux / Unix上运行,则可能很容易。检查locale charmap
或echo $LANG
在Windows上,实际上有两个字符集。 OEM代码页(适用于控制台(又称为DOS窗口))和 ANSI代码页(通常适用于GUI应用程序)。
您可以使用命令chcp
来查询(和修改)的OEM代码页
您可以从National Language Support (NLS) API Reference的注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP
获得ANSI代码页
我不知道哪一个适用于Informatica,但您应该可以尝试。
答案 1 :(得分:0)
The Problem was in code type in target database. Client support utf16.
I decieded to solve it with translate function.
create or replace function fix_kaz_letters(p_word in varchar2) return varchar2 deterministic
PARALLEL_ENABLE is
c_bad_letters CONSTANT VARCHAR2(18 CHAR) := CHR(1112 USING NCHAR_CS) /*ә*/
|| CHR(1032 USING NCHAR_CS) /*Ә*/
|| CHR(1110 USING NCHAR_CS) /*і*/
|| CHR(1030 USING NCHAR_CS) /*І*/
|| CHR(1169 USING NCHAR_CS) /*ө*/
|| CHR(1168 USING NCHAR_CS) /*Ө*/
|| CHR(1111 USING NCHAR_CS) /*ү*/
|| CHR(1031 USING NCHAR_CS) /*Ү*/
|| CHR(1118 USING NCHAR_CS) /*ұ*/
|| CHR(1038 USING NCHAR_CS) /*Ұ*/
|| CHR(1171 USING NCHAR_CS) /*ғ*/
|| CHR(1170 USING NCHAR_CS) /*Ғ*/
|| CHR(1179 USING NCHAR_CS) /*қ*/
|| CHR(1178 USING NCHAR_CS) /*Қ*/
|| CHR(1187 USING NCHAR_CS) /*ң*/
|| CHR(1186 USING NCHAR_CS) /*Ң*/
;
c_kaz_letters CONSTANT VARCHAR2(18 NCHAR) := CHR(1241 USING NCHAR_CS) /*ә*/
|| CHR(1240 USING NCHAR_CS) /*Ә*/
|| CHR(1110 USING NCHAR_CS) /*і*/
|| CHR(1030 USING NCHAR_CS) /*І*/
|| CHR(1257 USING NCHAR_CS) /*ө*/
|| CHR(1256 USING NCHAR_CS) /*Ө*/
|| CHR(1199 USING NCHAR_CS) /*ү*/
|| CHR(1198 USING NCHAR_CS) /*Ү*/
|| CHR(1201 USING NCHAR_CS) /*ұ*/
|| CHR(1200 USING NCHAR_CS) /*Ұ*/
|| CHR(1108 USING NCHAR_CS) /*ғ*/
|| CHR(1028 USING NCHAR_CS) /*Ғ*/
|| CHR(1116 USING NCHAR_CS) /*қ*/
|| CHR(1036 USING NCHAR_CS) /*Қ*/
|| CHR(1109 USING NCHAR_CS) /*ң*/
|| CHR(1029 USING NCHAR_CS) /*Ң*/
;
begin
return translate(p_word, c_bad_letters, c_kaz_letters);
end;