You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Python SQL语句报错ORA-00904:"I5"无效标识符,求排查解决

ORA-00904错误排查与解决
  • 错误根源:你用%s直接拼接字符串生成SQL时,若hostname是字符串值(比如I5),拼接后的SQL语句会变成TA_labor.CUSER1 = I5——Oracle会把I5当成列名而非字符串常量,这就触发了ORA-00904错误。而你在SQL Developer中执行时,肯定给字符串加了单引号(比如TA_labor.CUSER1 = 'I5'),所以能正常运行。
  • 正确解决方案:使用cx_Oracle的参数绑定机制,不要直接拼接字符串,这既解决语法问题,还能防范SQL注入:
    c.execute('select *
               from IQMS.work_center,
                    IQMS.TA_labor
               where work_center.ID = TA_labor.WORK_CENTER_ID
                 and TA_labor.CUSER1 = :1', (hostname,))
    
    也可以使用命名参数让代码更易读:
    c.execute('select *
               from IQMS.work_center,
                    IQMS.TA_labor
               where work_center.ID = TA_labor.WORK_CENTER_ID
                 and TA_labor.CUSER1 = :hostname', {'hostname': hostname})
    
  • 重要提醒:永远不要用字符串拼接构造带参数的SQL,参数绑定是数据库操作的标准安全规范,还能避免因特殊字符、数据类型不匹配引发的各类语法错误。

内容的提问来源于stack exchange,提问作者Somanath Prakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:03:26