Order by obrigatório após group by oracle 10? configuravel?

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
psegala
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Ter, 01 Jun 2010 10:08 am
Localização: Piracicaba-SP
PSegala

Informações do Ambiente:
* Versão do Oracle: Oracle Database 10g Release 10.2.0.3.0
* Sistema Operacional: MS-Windows XP

Pessoal, por favor vejam se podem me ajudar: após a instalação do Oracle 10g, notei que alguns relatórios passaram a apresentar as infos desordenadamente. Notei que seria necessário colocar um order by logo após o group by para corrigir este problema. Nas versões anteriores do Oracle isso não ocorria. Gostaria de saber se tem saída para tornar isto default no oracle 10g, como nas versões anteriores. Alguém sabe ?
Veja este exemplo:

select mo.cdsetor,
mo.cdtipodocumento,
mo.cdmaterial,
sum(mo.qtmovimento)
from movimento mo
group by mo.cdsetor, mo.cdtipodocumento, mo.cdmaterial
order by mo.cdsetor, mo.cdtipodocumento, mo.cdmaterial

* Se eu não colocar o order by, o resultado não virá nesta ordem, os cdtipodocumento, por exemplo, nem sempre aparecem agrupados...
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Cara, essa ordem default não tem regra alguma, retorna aleatoriamente, se você quer ordenado, coloca order by, funciona antes por SORTE, COINCIDENCIA, talvez foi a inserção sequencial,

não tem absolutamente nada a ver com a versão, resolva colocando o ORDER BY, é mais seguro.
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Os resultados após um group by eram trazidos ordenados devido ao algoitmo utilizado nestas versões. O fato dos resultados saírem ordenados ( de forma binária, aliás ) sempre foi um efeito colateral, e não garantido.

A partir da versão 10g o comportamento foi alterado, devido a mudanças no algoritmo de agrupamento.

O mais indicado é, sem dúvida, corrigir suas consultas colocando a cláusula order by quando necessário.

Alguns pontos interessantes sobre o assunto, se quiser dar uma olhada:
http://asktom.oracle.com/pls/asktom/f?p ... 7449124988
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante