PL/SQL执行报ORA-00934分组函数不允许在此处错误如何解决
错误原因
- 语法使用错误:Oracle PL/SQL的
SELECT ... INTO语句仅允许出现1次INTO关键字,所有接收查询结果的变量需要统一放在INTO之后、FROM之前,用逗号分隔。你提交的代码中重复书写了3次INTO关键字,导致SUM聚合函数被放置在语法非法位置,直接触发ORA-00934: group function is not allowed here报错,后续整条SQL被Oracle忽略。 - 潜在逻辑问题:当前分组查询如果返回多条结果,
SELECT INTO会触发ORA-01422: exact fetch returns more than requested number of rows报错,建议根据业务场景调整查询逻辑。
修复方案
方案1:修正SELECT INTO语法(仅适用于分组后仅返回1条结果的场景)
Declare v_U_HFB_STO Varchar(200); v_RAW_VOL_STO Number ; v_IO_RAW_VOL_STO Number ; begin select B.U_BACODE||B.U_BANAME, SUM(A.RAW_VOL), SUM(A.IO_RAW_VOL) into v_U_HFB_STO, v_RAW_VOL_STO, v_IO_RAW_VOL_STO from UDT_SNAPSHOT_IN_TIME_REPORT A, EXT_S_ITEM B WHERE A.REORDERPOINT<>1 AND A.LOC LIKE 'STO%' AND A.ITEM=B.ITEM GROUP BY (B.U_BACODE||B.U_BANAME); insert into STAGING.WEEKLY_ANALYSIS_TREND_REPORT_U_HFB_STO values(v_U_HFB_STO,v_RAW_VOL_STO,v_IO_RAW_VOL_STO); end; /
方案2:改用INSERT ... SELECT写法(适用于分组后返回多条结果的场景,性能更优)
不需要定义中间变量,直接将查询结果插入目标表,避免多行返回报错:
begin insert into STAGING.WEEKLY_ANALYSIS_TREND_REPORT_U_HFB_STO select B.U_BACODE||B.U_BANAME, SUM(A.RAW_VOL), SUM(A.IO_RAW_VOL) from UDT_SNAPSHOT_IN_TIME_REPORT A, EXT_S_ITEM B WHERE A.REORDERPOINT<>1 AND A.LOC LIKE 'STO%' AND A.ITEM=B.ITEM GROUP BY (B.U_BACODE||B.U_BANAME); end; /
内容的提问来源于stack exchange,提问作者Python code
相关产品推荐
相关产品推荐

