Progress 9.1E中PUB._Field表_Format列超限报错求助
SYSPROGRESS.SYSCOLUMNS_FULL查询的_Format列长度报错问题 问题场景
执行SELECT * FROM SYSPROGRESS.SYSCOLUMNS_FULL时触发报错:
ERROR [HY000] [DataDirect][ODBC PROGRESS driver][PROGRESS]Column
_Formatin tablePUB._Fieldhas value exceeding its max length or precision。
已知该视图基于PUB._Field与PUB._File的关联查询,尝试解冻_Field表修改_Format的SQL Width为1024、运行DBTool的SQL Width扫描修复工具、ODBC标量函数转义均无效;导出_Field数据后确认最长_Format值仅65字符,推测为版本遗留BUG。
可行解决办法
修改视图定义,规避长度校验
SYSPROGRESS.SYSCOLUMNS_FULL的定义存储在PUB._Sysviews中,可直接修改其查询逻辑:- 查询原视图定义:
SELECT _ViewText FROM PUB._Sysviews WHERE _ViewName = 'SYSCOLUMNS_FULL' AND _Owner = 'SYSPROGRESS' - 复制原SELECT语句,将
PUB._Field._Format替换为SUBSTRING(PUB._Field._Format, 1, 64)或CAST(PUB._Field._Format AS CHAR(64)),重新创建视图:CREATE OR REPLACE VIEW SYSPROGRESS.SYSCOLUMNS_FULL AS -- 粘贴修改后的完整SELECT语句
注:9.1E版本可能需先删除原有视图再重新创建,具体语法根据环境调整。
- 查询原视图定义:
编写自定义查询替代视图
跳过系统视图,直接关联_Field和_File表并显式处理_Format列:SELECT f._File, f._Field, CAST(f._Format AS CHAR(64)) AS _Format, fl._FileName -- 按需添加其他需要的列(从原视图定义中复制) FROM PUB._Field f INNER JOIN PUB._File fl ON f._File = fl._File调整ODBC字符集配置
9.1E版本可能存在字符集隐式转换问题,尝试在ODBC数据源配置中设置与数据库一致的字符集(如ISO-8859-1),或在连接字符串中添加Charset=ISO-8859-1参数。使用Progress原生工具查询
用Progress原生Procedure Editor执行查询,若能正常返回结果,说明问题出在ODBC驱动兼容性上,可尝试匹配9.1E版本的DataDirect驱动存档包。
内容的提问来源于stack exchange,提问作者Dai

