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

游标FOR循环执行报错ORA-00979:单独执行SQL正常嵌入后异常

ORA-00979错误排查与解决:游标FOR循环中的GROUP BY问题

问题现象

单独执行游标内的查询SQL可得到正确结果,但将其嵌入PL/SQL游标FOR循环后,抛出ORA-00979: not a GROUP BY expression错误。

错误原因

游标查询中的别名usage是Oracle的保留字。单独执行SQL时,解析器可能因上下文宽松未触发错误,但PL/SQL对语法的检测更严格,保留字作为别名会导致解析逻辑混乱,进而误报GROUP BY表达式错误。

解决方法

将游标查询中的保留字别名替换为非保留字,同时可优化ORDER BY子句减少重复计算:

修改后的完整代码

DECLARE
    v_sum_of_strength number :=0;
BEGIN
    for i in (
        select to_char(time,'MM-YYYY') "stick", count(*) usage_count 
        from my_view 
        group by to_char(time,'MM-YYYY')
        order by substr("stick",6), substr("stick",1,2)
    )
    LOOP
        select sum(strength) into v_sum_of_strength 
        from batch 
        where substr(to_char(startdate,'MM-YYYY'),1,2) <= substr('04-2022',1,2) 
          AND substr(to_char(enddate,'MM-YYYY'),1,2) >= substr('04-2022',1,2);

        dbms_output.put_line(v_sum_of_strength);
        dbms_output.put_line('------------------');
    END LOOP;
END;

额外提示

原代码中注释的i.candle应为i.stick(与游标查询的别名对应),若需要输出分组标识,可取消注释并修正为dbms_output.put_line(i.stick);。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:17:18