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:缺少表达式