ODBC错误“表y中的列x的值超过其最大长度或精度”

时间:2016-06-28 21:42:10

标签: odbc openedge progress-db

使用ODBC运行以下查询时,我从Progress数据库中收到此错误:

SELECT distinct Table.column,
        { fn CONVERT(SUBSTRING(Table.ProblematicColumn, 1, 60), SQL_VARCHAR)} as test
FROM PUB.Table
WHERE ( Table.id IN (
            SELECT Table.id
             FROM PUB.Table
            ) ) 

我知道可以使用DBTools修复它。但是,我针对多个客户端的多个Progress数据库运行查询,因此每次执行此操作都不实际。 另外,由于某种原因,我正在使用的ODBC客户端(PHP)在发生这种情况时不会显示任何错误。相反,它返回一个空结果。

我做了60个字符的VAR_CHAR转换确实有帮助,直到我添加了子查询。当子查询出现时,我再次遇到同样的错误。

有趣的是,当“不同”不存在时,它正在发挥作用。但我确实需要与众不同。

编辑:问题是如何在不使用DBTool修复宽度列的情况下执行此查询。

2 个答案:

答案 0 :(得分:1)

花了几分钟才找到答案。问题似乎是在OE10 SQL代理中没有处理where子句中的子选择。使用内部联接到子选择的替代方案看起来与我相同。我测试了它,它确实有效。替换SQL客户端将不执行任何操作,OpenEdge SQL代理中发生错误:使用OpenEdge JDBC驱动程序时出现相同的错误。

SELECT distinct Table.column,
   { fn CONVERT(SUBSTRING(Table.ProblematicColumn, 1, 60), SQL_VARCHAR)} as test
FROM PUB.Table inner join (select id from PUB.Table) t2 on Table.id = t2.id

答案 1 :(得分:0)

升级到OE 11.6。

11.6中有一些选项可以自动和静默地截断数据,这样就不会出错。

"自主架构更新"

https://community.progress.com/community_groups/openedge_rdbms/f/18/t/19534