SQL Server SQL服务器上的NTEXT转换为Oracle上的NVARCHAR 2(2000)(ORA-12899:值对于列太大)

tf7tbtn2  于 2023-02-07  发布在  Oracle
关注(0)|答案(1)|浏览(123)

我的源在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时,我想知道我是否错过了处理这个问题的任何东西。

请帮助我解决此问题。我正在处理许多表,经常出现此错误。

ix0qys7i

ix0qys7i1#

nvarchar2被限制为2000个字符,这需要4000个字节。您必须以字符为单位指定限制(因此是2000,而不是4000)。请尝试将函数更改为:

cast(substr([text],1,2000) as nvarchar2(2000)) as "TEXT"

相关问题