我的源在SQL Server中,目标是Oracle。在SQL Server中有一些表的列定义为NTEXT,我创建了NVARCHAR2(2000)的列,允许4000字节,以存储来自源的数据。
当我从SQL Server中提取定义为NTEXT的数据时,我对数据进行了类型转换和子字符串处理,以适应目标中的4000字节。我使用IBM的Data Stage从SQL Server中提取源代码,下面的代码执行将数据类型转换为varchar(4000),并提取指定长度(4000字节)的子字符串。
cast(substring([text],1,3950) as varchar(4000)) as "TEXT"
然而,在Oracle上插入大小为4000字节的NVARCHAR2(2000)时,经常出现错误ORA-12899。
错误信息:ORA-12899:列的值太大(实际值:3095,最大值:2000年)。
- 首先 *,很难理解为什么会发生错误,即使目的地有一个大小为4000字节的列,并且我已经使用SUBSTING剪切了数据。
- 其次 *,当我的团队没有考虑在Oracle上为那些NTEXT类型的数据使用CLOB时,我想知道我是否错过了处理这个问题的任何东西。
请帮助我解决此问题。我正在处理许多表,经常出现此错误。
1条答案
按热度按时间ix0qys7i1#
nvarchar2被限制为2000个字符,这需要4000个字节。您必须以字符为单位指定限制(因此是2000,而不是4000)。请尝试将函数更改为: