You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle子查询使用ORDER BY执行报ORA-00907缺少右括号问题

报错原因
  • 标量子查询中同时使用rownum = 1和order by不符合Oracle旧版本语法规范,直接触发ORA-00907: missing right parenthesis报错。
  • 即使语法兼容,现有写法的执行逻辑也不符合需求:Oracle会先执行where条件筛选出第一条记录,再执行排序,最终返回的不是排序后的第一条结果。
修复方案

方案1:Oracle 12c及以上版本(推荐)

使用fetch first 1 row only语法替代rownum=1,会先执行排序再取第一条记录,语法更简洁:

select 
  S.value, 
  nvl(
    (select D.value 
     from D
     join T on D.subID = t.SubID
     where D.subid2 = s.subid2 and t.subid3 = s.subid3
     order by t.id
     fetch first 1 row only),
  0) as value
from S;

方案2:兼容所有Oracle版本写法

将排序逻辑放在内层子查询,外层再通过rownum=1取第一条,既兼容旧版本语法,也能保证取到排序后的第一条结果:

select 
  S.value,
  nvl(
    (select tmp.value
     from (
       select D.value
       from D
       join T on D.subID = t.SubID
       where D.subid2 = s.subid2 and t.subid3 = s.subid3
       order by t.id
     ) tmp
     where rownum = 1),
  0) as value
from S;

内容的提问来源于stack exchange,提问作者Raed Alsaleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:39:05