首页 > IT职业 > IT生活 > 10R2 group by 无序
以往以为group by 后的记录集是排序的,而且在9i环境下屡试如此,最近在升级过程中终于发现了这种写法的不严谨之处。也可能是10gR2的内部算法开始有变,至少10gR2之前的版本group by是排序结果集,但10gR2不灵了!
前几天从9i升级到10gR2时,以往排好序的报表突然出现了乱序,查代码,发现select ... from tb group by ..没有强制使用order by ,虽然在以前的环境中得到的就是期望的排序结果集,可到了10gR2里不灵了!!!
仔细翻阅了Oracle各版本的官方文档http://tahiti.oracle.com/ 均明确注明:
The
GROUP BY clause groups rows but does not guarantee the order of the
result set. To order the groupings, use the ORDER BY clause.
可现实是10gR2之前的版本group by返回的结果集的确是排序的!到了10gR2就不是了!
这种变化的本质是10gR2的SQL执行计划算法有变导致:
(sort group by --->hash group by, 通过_gby_hash_aggregation_enabled隐藏参数=false可以设置成原来的排序结果集)
但从严谨的角度看还是建议新的代码里最好有order by 子句。
这是oracle10R2的一个bug,对于分组求sum结果也有出错的可能,这个bug在10.2.0.3中得到修复。
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/18921899/viewspace-1017394/ ,如需转载,请注明出处,否则将追究法律责任。