Rafael, vc está caindo numa das mais clássicas FAQs do RDBMS Oracle : o que 
acontece é que o ROWNUM é atribuído  ANTES da Ordenação, aí fica fora de ordem, 
okdoc ? O correto é vc usar  :
  
  SELECT * FROM (SELECT desejado ORDER BY o que vc quer) WHERE ROWNUM < 
limitador 

 okdoc ?? Entre n+1! outros lugares, isso é citado em 
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html
 (a melhor fonte, imho) mas também no FAQ semi-oficial em 
http://www.orafaq.com/wiki/ROWNUM e em 
http://www.dbforums.com/oracle/988716-rownum-order.html . é ultra-conhecida...
 
 
   []s
   
     Chiappa

--- Em oracle_br@yahoogrupos.com.br, Raphael Franco <phadba@...> escreveu
>
> 
> 
> Oracle 10g SE R2
> 
> 
> Pessoal porque não gravam os mesmos dados na tabela que o select ??
> Insiro isso:
> 
> 
> insert into as_vinte_maiores_tab
>     select segment_name, object_type, a.owner, tamanho, 
> tablespace_name,sysdate data
>     from (select rownum, segment_name, owner,tablespace_name, 
> sum(bytes/1024/1024) Tamanho
>     from dba_segments group by rownum, segment_name, owner,tablespace_name
>     order by sum(bytes/1024/1024) desc) a,
>     dba_objects b
>     where a.segment_name = b.object_name
>     and rownum < 20;
> 
> 
> 
> Porém o resultado de:
> 
> select * from as_vinte_maiores_tab;
> 
> são diferentes de:
> 
> 
>     select segment_name, object_type, a.owner, tamanho, 
> tablespace_name,sysdate data
>     from (select rownum, segment_name, owner,tablespace_name, 
> sum(bytes/1024/1024) Tamanho
>     from dba_segments group by rownum, segment_name, owner,tablespace_name
>     order by sum(bytes/1024/1024) desc) a,
>     dba_objects b
>     where a.segment_name = b.object_name
>     and rownum < 20;
> 
> 
> 
> att.
> Phael
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a