cx_Oracle执行SQL报ORA-00933命令未正确结束如何解决
问题原因
- SQL字符串拼接遗漏空格:多行字符串拼接时相邻片段没有预留空格,拼接后的SQL会出现
SOME.DATABASEWHERE、:tc)AND这类语法错误的片段,这是触发ORA-00933 SQL command not properly ended报错的直接原因。 - 绑定变量添加了多余单引号:cx_Oracle的绑定变量机制会自动处理数据类型和引号包裹,不需要手动给传入的参数值加单引号。你当前定义
vary = "'Y'"、tempCheck = "'%{0}/%'".format(checkerAR)时额外加的单引号会被作为值的一部分传入SQL,最终导致查询结果不符合预期,属于逻辑错误。
修正后代码
import cx_Oracle vary = "Y" # 移除多余的单引号 dsn_tns = cx_Oracle.makedsn(hostName, port, service_name=serviceName) conn = cx_Oracle.connect(user=usr, password=__pswrd, dsn=dsn_tns) c = conn.cursor() tempCheck = "%{0}/%".format(checkerAR) # 移除多余的单引号 # 每个SQL片段末尾加空格避免拼接后语法错误 statmentApp = 'SELECT TITLE,APP_URL from SOME.DATABASE ' \ 'WHERE UPPER(APP_URL) LIKE UPPER(:tc) ' \ 'AND ACTIVE_FLAG = :y' c.execute(statmentApp, tc = tempCheck , y = vary)
内容的提问来源于stack exchange,提问作者Glenville Pecor
相关产品推荐
相关产品推荐

