ORA-30490: Ambiguous expression in GROUP BY ROLLUP or CUBE list

文档解释

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) ,这样就能正确确定表达式。

你可能感兴趣的