【问题标题】:What could cause an ORA-00936 - Missing Expression with the following sql?什么可能导致 ORA-00936 - 缺少以下 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,并且该版本存在已知问题。

【问题讨论】:

    标签: sql oracle ora-00936


    【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多