0

我在将哈萨克语中的数据从一个 db oracle 转换到另一个 oracle 时遇到问题。源数据库有AL32UTF8 NLS_CHARACTERSET(根据v$nls_parameters),目标有CL8MSWIN1251 这个怎么解决?我用 informatica 插入 raw

4

2 回答 2

0

根据HOW TO: Set the Oracle NLS_LANG environment variable you

将托管 Informatica 服务的计算机上的 NLS_LANG 环境变量设置为 Oracle 客户端操作系统正在使用的值。

对我来说,不清楚“Oracle 客户端操作系统正在使用的价值”是什么意思。

如果 Informatica 在 Linux/Unix 上运行,那么它可能很容易。检查locale charmapecho $LANG

在 Windows 上,您实际上有两个字符集。适用于控制台(也称为 DOS 窗口)的OEM 代码页和通常适用于 GUI 应用程序的ANSI 代码页。

您可以使用命令查询(和修改)的 OEM 代码页chcp

您可以从 Registry 获得的 ANSI 代码页HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP来自National Language Support (NLS) API Reference

我不知道哪一个适用于 Informatica,但您应该可以尝试。

于 2019-10-09T05:46:43.090 回答
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;
于 2019-10-10T08:04:30.860 回答