文档解释
ORA-30490: Ambiguous expression in GROUP BY ROLLUP or CUBE list
Cause: An expression in the GROUP BY ROLLUP or CUBE list matches an expression in the ordinary GROUP BY expression list
Action: Remove the expression from either ordinary GROUP BY expression list or ROLLUP or CUBE expression list
ORA-30490: Ambiguous expression in GROUP BY ROLLUP or CUBE list错误消息指示GROUP BY系列(GROUP BY ROLLUP或CUBE)的表达式不明确。该名称指的是指定集的GROUP BY子句,例如GROUP BY ROLLUP(col1,col2),它指定将结果分组为按col1,col2排序的多个个组集。
官方解释
当存在对于GROUP BY ROLLUP 或 CUBE 的表达式不明确时,Oracle Database 会报出ORA-30490: Ambiguous expression in GROUP BY ROLLUP or CUBE list 错误消息。这种情况下,将表达式放到GROUP BY子句中会发生歧义。Oracle Database会报出ORA-30490 错误的原因是因为指定的表达式根据实现的具体情况而不同,可能存在多种结果,无法正确确定如何处理查询。
常见案例
1. 在GROUP BY子句中使用了函数,即group by rollup(func1(col1), func2(col2)) 。
2. group by rollup(col1,col2+2),由于无法分辨 col2+2 属于哪个表中的字段,因此会产生歧义。
一般处理方法及步骤
1. 避免在GROUP BY子句中使用函数。
2. 将GROUP BY子句中的表达式转换为它们属于哪个表中的字段,针对扩展后的表达式,重新确定GROUP BY的表达式子集,以便解决歧义问题。
3. 也可以使用group by子句中的别名来确定表达式的范围,例如: select col1, col2+2 as calc from table group by rollup(calc) ,这样就能正确确定表达式。