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

Oracle SQL Developer提示缺少右括号,代码无缺失求排查

问题排查与修复方案

错误原因分析

你遇到的「缺少右括号」是Oracle编译器的误报,实际存在两个语法逻辑问题:

  1. IN子查询中禁止使用ORDER BY:IN关键字后的子查询返回的是无序列表,Oracle不允许在这类子查询中添加ORDER BY子句,这会触发语法错误,编译器错判为括号缺失。
  2. TABLE()函数无法直接转换游标:TABLE()仅支持嵌套表、VARRAY等集合类型,不能直接处理游标对象,这也是后续执行会报错的隐患。

修复后的代码

CREATE OR REPLACE PROCEDURE generer_listes_preferees (
  p_id_user IN UTILISATEUR."id_user"%TYPE,
  p_films OUT SYS_REFCURSOR
)
AS
BEGIN
  -- 直接通过主查询完成排序和取数,无需冗余游标
  OPEN p_films FOR
    SELECT o.*
    FROM OBJET o
    JOIN AVIS a ON o."id_objet" = a."id_objet"
    WHERE o."categorie_obj" LIKE 'Films' 
      AND a."id_user" = p_id_user
    ORDER BY a."note" DESC, a."date_avis" DESC
    FETCH FIRST 10 ROWS ONLY;
END;
/

关键优化说明

  • 移除了不必要的本地游标,直接在OPEN...FOR语句中编写核心查询,简化逻辑。
  • 用JOIN替代IN子查询,将排序逻辑移到主查询中,既符合Oracle语法规范,又能正确实现按评分、日期排序取前10条的需求。
  • 避免了TABLE()函数的错误使用,直接通过游标返回结果集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:50:19