什么可能导致 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 的表达式?的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00936 缺少表达式

ora:00936 缺少表达式错误

出现错误 ORA-00936: 缺少表达式

查询返回 ORA-00936: 缺少表达式

多维数据集 SQL ORA-00936 缺少表达式

ORA 00936 缺少表达式