ORA-00936: 缺少表达式 oracle

Posted

技术标签:

【中文标题】ORA-00936: 缺少表达式 oracle【英文标题】:ORA-00936: missing expression oracle 【发布时间】:2014-03-22 19:00:24 【问题描述】:

我有这个问题

SELECT DAL_ROWNOTABLE.DAL_ID FROM 
(
    SELECT ticket.id AS "DAL_ID",  ROWNUMBER ( Order By ticket.id  )  AS "DAL_ROWNUMBER" 
    FROM ticket_table ticket 
    WHERE ( ticket.type = N'I' ) 
    AND 
    ( 
        ticket.tenant IS NULL OR ticket.tenant IN 
        (
            SELECT  * FROM 
            ( 
                SELECT tenant_group_member.tenant_id 
                FROM tenant_group_member 
                WHERE tenant_group_member.tenant_group = HEXTORAW('30B0716FEB5F4E4BB82A7B7AA3A1A42C') 
                ORDER BY ticket.id 
            ) 
         ) 
     )
) DAL_ROWNOTABLE 
WHERE DAL_ROWNOTABLE.DAL_ROWNUMBER BETWEEN 1 AND 21

引发 ORA-00936 缺失表达式的允许查询有什么问题?任何人?任何帮助将不胜感激...在列:80 抛出错误,这是在第一个订单的开头:

【问题讨论】:

虽然@wildplasser 更具可读性 子查询中的ORDER BY完全没有意义,它周围的子查询也是如此。 感谢 wildplasser,Gordon 建议的查询修改正在起作用......我会进一步检查...... 【参考方案1】:

ORA-00936 通常表示语法错误。

ROWNUMBER 不是 Oracle 函数。除非您有该名称的用户定义函数,否则我怀疑您要查找的函数是 ROW_NUMBER()

【讨论】:

【参考方案2】:

您的查询可以大大简化。它在in 子查询中有额外的子查询层和不必要的order by。你想用rownumber做什么你可以用rownum做什么:

SELECT DAL_ROWNOTABLE.DAL_ID
FROM (SELECT ticket.id AS "DAL_ID" 
      FROM ticket_table ticket 
      WHERE (ticket.type = N'I' ) AND 
            (ticket.tenant IS NULL OR
             ticket.tenant IN (SELECT tgm.tenant_id 
                               FROM tenant_group_member tgm
                               WHERE tgm.tenant_group = HEXTORAW('30B0716FEB5F4E4BB82A7B7AA3A1A42C') 
                              ) 
            )
      ORDER BY ticket.id
     ) DAL_ROWNOTABLE 
WHERE rownum <= 21;

【讨论】:

似乎成功了...感谢 Gordon :) 和其他...我会进一步测试...

以上是关于ORA-00936: 缺少表达式 oracle的主要内容,如果未能解决你的问题,请参考以下文章

Oracle CASE WHEN - ORA-00936:缺少表达式

ORA-00936: 缺少表达式解决方案 - 转换函数

带有 ORA-00936 的 SQL 查询实例:缺少表达式错误

ORA-00936: 缺少表达式

ORA-00936 缺少表达式

ORA 00936 缺少表达式