什么可能导致 ORA-00936 - 缺少以下 sql 的表达式?
Posted
技术标签:
【中文标题】什么可能导致 ORA-00936 - 缺少以下 sql 的表达式?【英文标题】:What could cause an ORA-00936 - Missing Expression with the following sql? 【发布时间】:2008-10-30 11:30:40 【问题描述】:我们看到以下 SQL 的错误消息 ORA-00936 Missing Expression:
请注意,这只是一个更大的 SQL 的精简版本,因此将其重写为内部连接或类似内容并不真正在此范围内:
这是失败的 SQL:
select (select count(*) from gt_roster where ROS_ROSTERPLAN_ID = RPL_ID)
from gt_rosterplan
where RPL_ID = 432065061
我尝试过的: * 提取最里面的 SQL 并用外部 SQL 替换 ID,得到数字 12。 * 为子查询和 count(*) 单独和同时设置别名不会改变结果(即仍然是一个错误)
我还需要看什么?
上面只是表,没有视图,RPL_ID是gt_rosterplan的主键,ROS_ROSTERPLAN_ID是这个列的外键,这里基本没有什么神奇或隐藏信息。
编辑:回答:不,您不需要此处的别名,因为列在表中是唯一命名的。
已解决:问题是客户端运行了错误的客户端驱动程序版本 9.2.0.1,并且该版本存在已知问题。
【问题讨论】:
【参考方案1】:问题在于客户端运行了错误的客户端驱动程序版本 9.2.0.1,并且该版本存在已知问题。
【讨论】:
【参考方案2】:这应该可行,假设列名没有歧义(即使它们会导致不同的错误)。我运行了一个等效的语句并得到了没有错误的结果:
SQL> select (select count(*) from emp2 where empdeptno = deptno)
2 from dept
3 where deptno=10
4 /
(SELECTCOUNT(*)FROMEMP2WHEREEMPDEPTNO=DEPTNO)
---------------------------------------------
3
谷歌搜索发现存在或曾经存在导致 ORA-00936 错误的 Oracle 错误 - 请参阅 this for example。
【讨论】:
以上是关于什么可能导致 ORA-00936 - 缺少以下 sql 的表达式?的主要内容,如果未能解决你的问题,请参考以下文章