我的项目正在进行技术升级,因此我们将Oracle DB从11g升级到12c。 SAP DataServices已升级到版本14.2.7.1156。
当Oracle 12C中的表默认为varchar(char)时,默认为varchar(byte)。我明白这很正常。因此,我为每个运行
的数据存储区更改了会话`ALTER session SET nls_length_semantics=CHAR;`
当我使用varchar(1)创建一个新表时,我可以将来自中文字符(即东)的unicode字符加载到Oracle的新表中。
但是,当我尝试通过SAPDS将相同的unicode字符加载到同一个表中时,它会向我抛出错误'ORA-12899 - 值对于列来说太大了'。我的数据存储区设置为:
区域设置
-Language:默认
-Code页面:utf-8
- 服务器代码页:utf-8
会话
- 附加会话参数:
`ALTER session SET nls_length_semantics=CHAR`
我真的很想知道我的SAP BODS需要更改哪些设置,因为我的Oracle似乎工作正常。
答案 0 :(得分:0)
我认为,您应该考虑将表列从varchar2(x BYTE)修改为varchar2(x CHAR)以允许Unicode(UTF-8格式)数据并避免使用ORA-12899
。
create table test1 (name varchar2(100));
insert into test1 values ('east');
insert into test1 values ('东');
alter table test1 modify name varchar2(100 char);
- 您可以为每列检查'char_used',例如 -
select column_name, data_type, char_used from user_tab_columns where table_name='TEST1';