Comportamiento group by en oracle 10g

Recientemente me han actualizado la versión de la base de datos 10g. Me llevé una gran sorpresa al ver que las consultas con GROUP BY ya no estaban ordenadas por los mismos campos de la cláusula. He programado en Oracle 8 y 9 y siempre había dado por hecho que, salvo que necesitara uno distinto, el orden sería el mismo que el del GROUP BY. He leído en un blog que Oracle ha cambido la estrategia de ordenación por defecto en la 10g. Ahora es HASH GROUP BY y comentan que tiene un bug que se resuelve en la 11g. En el blog dicen que oracle recomienda (en las versiones con el bug) poner el parámetro _gby_hash_aggregation_enabled parameter a FALSE o optimizer_features_enabled a 9.2.0.
Sin embargo, leyendo la nota 345048.1 ‘Group By’ Does Not Sort If You Don’T Use Order By In 10g lo que entiendo es que no es un bug. Sencillamente es un efecto colateral del algoritmo de agrupación (antiguo) lo que hacía que salieran ordenadas. Nunca ha habido garantías de ordenación. Por tanto toca poner order by a todas las consultas con group by lo que puede conllevar unas cuantas horas de divertida revisión del código.

Anuncios

Sql*plus Windows GUI en extinción

Acabo de leer en un artículo de Tom que el interfaz de sql*plus para windows desaparecerá en próximas versiones de Oracle. En su lugar dejarán sólo el cliente para DOS y el iSql*Plus. A mi me da igual porque siempre he tenido la suerte de poder usar el sql*plus en el shell de linux, pero para mucha gente va a ser una putada. Un argumento más para pasarse al lado oscuro de Lord Toad.