没有聚合函数的Oracle 11.2.0.1.0_GROUP BY不会引发错误?

时间:2017-03-10 02:21:14

标签: sql oracle oracle11g

今天我面临一个非常奇怪的问题,我没有运气。在我们的一个程序中,我遇到了这个问题:

select count(*) into b_count 
from (
    select col1, col2, col3 
    from table_name 
    where col_id = b_id and col3 = b_col3 
    group by col1, col2);

我们不要谈论我们可以在不使用子查询的情况下重写的这个糟糕的查询。

这里的问题出在我们的开发数据库中,oracle没有提出ORA-00979 not a GROUP BY expression我们可以正常运行程序(没有控制,否则没有,......)。在我们的真实数据库中它确实引起了错误。

以前有人见过这个吗?有人可以向我解释一下吗?

在尝试重现问题时,我编写了这个查询,它在我们的开发数据库中运行正常(结果计数(*)= 2而不是3),在我们的实际数据库中是错误00979:

WITH table_name AS 
(
    SELECT 1 col1, 2 col2, 3 col3 FROM DUAL UNION ALL
    SELECT 1, 3, 4 FROM DUAL UNION ALL
    SELECT 2, 7, 8 FROM DUAL 
)
SELECT COUNT(*)
FROM (
    SELECT col1, col2, col3
    FROM table_name
    GROUP BY col1
);

P / S:我们的开发数据库:

  

Oracle Database 11g企业版11.2.0.1.0版 - 64位生产

我们的真实数据库:

  

Oracle Database 11g企业版11.2.0.3.0版 - 64位生产

11.2.0.1.0的查询优化器是否更智能"在子查询中省略了SELECT语句,只在主查询中使用SELECT COUNT(*)?或者它是Oracle中的一些我不知道的设置?

这是dev db中的查询计划,它似乎与SELECT SUM(col3) FROM (SELECT col1, MAX(col3) col3 FROM table_name GROUP BY col1)之类的正在运行的查询没有什么不同 enter image description here

0 个答案:

没有答案