1

我们正在尝试通过 Oracle 11gR2 网关连接到 Sql Server 2005,当我们查询从 Sql Server 获取数据的视图时,我们收到此错误:

Error: ORA-28500:[Oracle][ODBC SQL Server Driver]String data, right truncation 

我已经注释掉了在 Oracle 上运行的查询中的一些列,并且它起作用了。注释列的数据类型为 VARHCAR(30),但也有其他字段为 VARCHAR(30)。

此错误是否有任何解决方法,如果我添加这 3 列使整个查询失败,一切都会好起来的,我尝试在 Sql Server 2005 上运行的视图重命名这些字段,这是数据源,没有结果。

ODBC 和 SQL Server 驱动程序都已安装,我们使用的是 SQL Server 驱动程序“dg4msql”。Oracle 字符集是 AL32UTF8。

4

1 回答 1

0

最可能的原因是这些列包含 Oracle 将使用多个字节来存储的字符。网关看到该列在 SQL Server 中定义为 VARCHAR(30),因此它在 Oracle 中创建了一个 VARCHAR2(30) 列,但是 (30) 这里是 30 个字节而不是 30 个字符,因此您可以截断数据,如果Oracle 想要使用的总字节数超过 30。(即,您在 SQL Server 中有 30 个字符,但其中一个在 Oracle 中需要 2 个字节,因此长度现在为 31,因此太大了)。

作为一种解决方法,将 SQL Server 中的 VARCHAR(30) 列更改为 NVARCHAR(30) - 然后网关将知道它可能会获取多字节字符并将列定义转换为 NVARCHAR 并允许插入。

请参阅11gR2 的网关数据类型转换表,了解有关列将如何进行 eb 转换的更多信息。

于 2011-04-07T10:10:43.203 回答