cx_Oracle执行DBeaver可运行的Oracle SQL报ORA-00933错误求助
ORA-00933报错排查方案
- 第一优先级排查:删除SQL末尾的分号
DBeaver这类数据库客户端默认支持SQL语句末尾用分号作为结束标识,但cx_Oracle执行单条SQL语句时,不允许末尾携带分号,这是该类跨环境执行报错最常见的诱因。你可以先把SQL最后的;删除后重新执行测试。 - 第二优先级排查:检查Python中SQL字符串的拼接正确性
如果你在Python代码中是通过多行字符串拼接的方式组装该SQL,需要确认拼接过程中没有出现前后行语句直接粘连的问题,比如前一行末尾没有空格、后一行直接跟上就会出现语法断裂,例:"select * from test""where id=1"会被拼接为非法语句select * from testwhere id=1。
你可以在执行SQL前把最终拼接完成的SQL字符串打印出来,复制到DBeaver中执行,如果DBeaver也报错,就说明是拼接过程导致的语法问题。 - 第三优先级优化:调整日期格式写法避免会话参数差异
你当前SQL中使用的to_date('26-JUL-2021')写法依赖数据库的NLS_DATE_LANGUAGE会话参数,DBeaver和cx_Oracle的会话参数可能存在差异,虽然这类问题通常不会触发ORA-00933报错,但为了兼容性建议调整为和语言无关的写法:to_date('2021-07-26', 'yyyy-mm-dd')。
如果以上排查都没有解决问题,可以把Python中执行SQL的相关代码片段贴出来进一步定位。
内容的提问来源于stack exchange,提问作者dohan_rivas
相关产品推荐
相关产品推荐

