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

Oracle查询使用Window子句报ORA-00907缺失右括号错误

报错原因

这个ORA-00907和括号缺失没有任何关系,本质是版本语法兼容问题:
独立命名窗口的WINDOW子句是Oracle 21c才正式上线支持的语法,在21c之前的所有Oracle版本(包括生产环境广泛使用的11g、12cR2、19c等长期支持版本)中,解析器无法识别FROM子句后跟随的window w as (...)结构,解析流程中断后就会抛出"缺失右括号"的误导性错误,这也和你观察到的"移除Window子句后查询可正常执行"的现象完全吻合。

修改方法

根据你实际使用的Oracle版本选择对应方案即可:

  • 21c之前的版本(绝大多数生产场景)
    不支持独立WINDOW子句,直接把窗口定义内联到每个分析函数的OVER()块中即可,修正后的SQL如下:

    select P.*,
           first_value(product_name) over (
             partition by product_category
             order by price desc
             range between unbounded preceding and unbounded following
           ) MAX_PRICE,
           last_value(product_name) over (
             partition by product_category
             order by price desc
             range between unbounded preceding and unbounded following
           ) MIN_PRICE
    from   product P;
    

    踩坑提醒:Oracle中如果分析函数指定了order by但未显式声明窗口范围,默认窗口规则为range between unbounded preceding and current row。如果省略全分区范围的声明,last_value()只会返回当前行的商品名,无法拿到分类下最低价对应的商品,必须显式写全range between unbounded preceding and unbounded following的范围定义。

  • 21c及以上版本
    你原本的写法本身符合语法规范,如果仍报相同错误,检查数据库的兼容级别参数是否配置为21.0及以上即可,不需要修改SQL结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:36:34