IDS数据库查询报SQLCODE=-217错误如何定位引发异常的列
问题排查与修复方案
你的错误代码SQLCODE=-217代表SQL解析时识别到未定义的列/标识符,既然已确认查询中显式声明的列名都存在,问题出在where条件中posnr的切片写法不符合IBM Informix(IDS)的语法规范:IDS中默认将方括号识别为特殊列名的包裹符,会把posnr[10,10]中的括号内容误判为关联列名,才会抛出Column ( ) not found的提示。
调试定位步骤
- 首先执行最简无过滤查询,验证列名有效性:
select mandant, posnr, systemdat, lieferbedingung, loeschhafen, bereich, nrkreis_nr from eakopf_t limit 1;
如果查询正常返回结果,即可完全排除列名拼写错误问题,错误点100%集中在where条件中。
- 逐段添加where条件,定位报错位置:
依次添加每一段过滤规则执行查询,加到哪一条规则时出现-217错误,即为错误来源:
- 先添加
where mandant <> 999 - 再添加
and posnr[1,2] not in ("99","RE","UB") - 最后添加
and posnr[10,10] = " "
修复方案
将数组式切片替换为IDS支持的SUBSTRING函数,同时SQL中字符串统一使用单引号避免被解析为标识符:
query = """ select mandant,posnr,systemdat, lieferbedingung,loeschhafen,bereich, nrkreis_nr from eakopf_t where SUBSTRING(posnr FROM 10 FOR 1) = ' ' and SUBSTRING(posnr FROM 1 FOR 2) not in ('99','RE','UB') and mandant <> 999; """ df = pd.read_sql(query, engine.connect())
内容的提问来源于stack exchange,提问作者x89
相关产品推荐
相关产品推荐

