【发布时间】:2014-11-14 19:58:43
【问题描述】:
我正在尝试使用从一个 Oracle DB 到另一个的 IPC 映射进行简单的数据加载。
源表结构如下:
ID NUMBER;
C_VALUE VARCHAR2 (16);
C_CODE VARCHAR2 (16);
SN NUMBER;
SU NUMBER;
目标表结构如下:
ID NUMBER
C_VALUE VARCHAR2 (20)
SSID NUMBER
LOADID NUMBER
LOADROWNUMBER NUMBER
DATEBEGIN DATE
DATEEND DATE
当我运行工作流时,我收到以下错误:
8340||错误:目标表 [TYPE_ACC_RRB] 数据截断/溢出 错误。
当我尝试调试我的映射时,我看到c_value 字段中的输入字符串由 unicode 字符表示,并且它的长度以字节为单位加倍。
Informatica 是否将字节字符计为其字符串字段的长度? 如何让它看到字符,而不是字节?
我从会话日志中看到的是:
Server Mode: [UNICODE]
Server Code page: [UTF-8 encoding of Unicode]
The session sort order is [Binary].
Source database connection [RBO01] code page: [MS Windows Cyrillic (Slavic)]
Target database connection [STG1] code page: [MS Windows Cyrillic (Slavic)]
我的映射:
【问题讨论】:
-
相当直接。看图
-
Yes首先我在会话中的设置“拒绝截断/溢出的行”已关闭,我在目标表中看到了截断的字符串。例如,在源中它的值是“пассивный”,但在目标表中我变成了“пассивны”。
-
它没有帮助。首先,我在源限定符和表达式转换中将 string 更改为 nstring。运行映射并得到相同的结果。然后我在目标定义中将 varchar2 更改为 nvarchar2 - 仍然出现该错误。然后我尝试运行这个映射的调试器。在调试器中,我尝试通过此映射传递 mt 数据,并且数据成功传递而没有错误。但是数据以奇怪的方式显示 - Informatica 显示字节而不是 unicode 字符:andsh.ru/mapping_debug.png
-
它在调试器中有效,但在实际中无效。当第一次它在没有激活“拒绝截断/溢出的行”的情况下工作时,我的目标表填充了由 8 个西里尔字符组成的截断字符串,但我的表字段是 Varchar2(20),我的数据库的编码很简单 cl8mswin1251
-
在安装了 Informatica 的主机上,您能否尝试通过 sqlplus 插入数据并检查您是否能够看到正确的数据?如果没有,您可能必须检查该框上的 NLS_LANG 环境变量。尝试将其设置为与目标数据库代码页相同的值(MS windows Cyrillic (slavic))。
标签: unicode overflow informatica-powercenter truncation