ORA-12899 - 当升级到Oracle 12C时,列的值太大了。

问题描述 投票:1回答:1

我的项目正在进行技术升级,所以我们正在将Oracle DB从11g升级到12c。SAP DataServices升级到了14.2.7.1156版本。

在Oracle 12C中的表默认为varchar(字节),而它应该是varchar(char)。我理解这是正常的。所以,我改变了每个数据存储的会话,运行了

`ALTER session SET nls_length_semantics=CHAR;`

当我创建一个新的表,使用varchar(1)时,我能够从Oracle加载像汉字(即东)这样的unicode字符到新表中。

然而,当我尝试通过SAPDS将相同的unicode字符加载到同一个表中时,它向我抛出了一个错误 "ORA-12899 - value too large for column"。我的数据存储设置是。

Locale
Language: default
Code Page: utf-8
Server code page: utf-8

Additional session parameters: 
ALTER session SET nls_length_semantics=CHAR

我真的很想知道我在SAP BODS中需要改变什么设置,因为我的Oracle似乎工作正常。

unicode sap oracle12c sap-data-services
1个回答
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';
© www.soinside.com 2019 - 2024. All rights reserved.