[oracle_br] Re: Order by

2015-04-15 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Tá, mas esses "alguns grants" não são suficientes para vc fazer um trace e/ou 
consultar as v$ necessárias para se obter o texto E os planos de execução *** 
EXATOS e REAIS *** dos SQLs, para primeiro comprovar que a query sendo 
executada no client está RIGOROSAMENTE IGUAL á query testada direto no servidor 
e Depois comprovar se o Plano é o mesmo ou não ??? Pois como eu disse, basta um 
binding e/ou um valor de pesquisa diferente para se obter Planos totalmente 
diferentes, em alguns casos Como eu disse, vc só deve 'atacar' a frente de 
eventuais alterações de parâmetros SE e APENAS SE vc obter performance 
diferente no client e no servidor para o MESMA EXATA query com o MESMO EXATO 
Plano de ExecuçãoIsso é IMPORTANTE : please cheque SQL e Planos antes de 
sequer PENSAR a mexer no database...

  SE for isso mesmo de diferentes performances para mesmo sql com mesmo plano, 
aí de cara a gente Questionaria essa sort_area_size de 209.715.200 bytes : 200 
megabytes é ridiculamente minúsculo, acho que é tranquilo passar (a nível de 
sessão, que seja, para teste) o gerenciamento de workarea para MANUAL e alterar 
sort_area_size para alguns poucos gigabytes (e hash_area_size para 2x 
sort_area_size, se o Plano usa algum tipo de hashing)...
  
   []s
   
 Chiappa

Re: [oracle_br] Re: Order by

2015-04-15 Por tôpico André Luiz aandre...@yahoo.com.br [oracle_br]
Caros,
Esta query roda via aplicação?  Se for o que tem por trás? Um hibernt?

Enviado do meu iPhone

> Em 15/04/2015, às 13:44, lmarinh...@yahoo.com.br [oracle_br] 
>  escreveu:
> 
> Obrigado Chiappa!
> 
> Então como eu não tenho o total acesso neste servidor, apenas com alguns 
> grants, Aqui esta as configurações.
> 
> sort_area_size   integer 209715200
> sga_max_size big integer 12G
> sga_targetbig integer 12G
> shared_pool_reserved_sizebig integer 199648870
> shared_pool_size big integer 3G
> pga_aggregate_target big integer 2576980377
> hash_area_size   integer 419430400
> 
> Fiz o plano do meu lado e solicitei o pessoal responsável para enviar do lado 
> deles.
> 
> LM
> 


[oracle_br] Re: Order by

2015-04-15 Por tôpico lmarinh...@yahoo.com.br [oracle_br]
Obrigado Chiappa! Então como eu não tenho o total acesso neste servidor, apenas 
com alguns grants, Aqui esta as configurações.
 

 sort_area_size   integer 209715200
 sga_max_size big integer 12G
 sga_targetbig integer 12G
 shared_pool_reserved_sizebig integer 199648870
 shared_pool_size big integer 3G
 pga_aggregate_target big integer 2576980377
 hash_area_size   integer 419430400
 

 Fiz o plano do meu lado e solicitei o pessoal responsável para enviar do lado 
deles.
 

 LM



[oracle_br] Re: Order by

2015-04-15 Por tôpico lmarinh...@yahoo.com.br [oracle_br]
Obrigado Chiappa! Então como eu não tenho o total acesso neste servidor, apenas 
com alguns grants, mas posso te garantir já que a PGA não esta AUTO aqui esta 
as configurações.
 

 sort_area_size   integer 209715200
 sga_max_size big integer 12G
 sga_target   big integer 12G
 shared_pool_reserved_sizebig integer 199648870
 shared_pool_size big integer 3G
 pga_aggregate_target big integer 2576980377
 hash_area_size   integer 419430400
 

 Fiz o plano do meu lado e solicitei o pessoal responsável para enviar do lado 
deles.
 

 LM



Re: [oracle_br] Re: Order by

2015-04-13 Por tôpico Ricardo Arnoud ricardo...@gmail.com [oracle_br]
Quantas rows essa query retorna?

2015-04-13 12:09 GMT-03:00 jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br>:

>
>
> Hmmm... Quando vc fala que executando no servidor roda em segundos e no
> cliente roda em minutos, vc TEM CERTEZA que está testando MAÇÃ com MAÇÃ, ie
> : é  EXATAMENTE O MESMO SQL , com ** EXATAMENTE O MESMO *** texto,
> com EXATAMENTE OS MESMOS bindings  Basta um mínimo binding diferente
> para se obter planos diferentes, em alguns casos...
>
> Se for MESMO SQLs iguaizinhos até o último detalhee taanto lá no cliente
> quanto aqui no servidor, qual é o plano de execução ** real ** (ie, não é
> pedir um EXPLAIN PLAN, mas sim o plano que REALMENTE foi usado, extraído do
> cache com DBMS_XPLAN.DISPLAY_CURSOR e INCLUINDO as estatísticas de uso do
> SQL) , tanto lá quanto cá ???
>
> ==> Se forem planos diferentes para RIGOROSAMENTE O MESMO SQL, aí pergunto
> : as estatísticas do CBO estão OK , as colunas A-ROWS e E-ROWS fazem
> sentido ?? E a DIFERENÇA das estatísticas de sessão (ie, o resultado datual
> menos o anterior), é interessante se ccoletar, também ... Se vc não sabe
> como, http://rwijk.blogspot.com.br/2008/03/dbmsxplandisplaycursor.html dá
> um overview na obtenção de planos e
> https://asktom.oracle.com/pls/apex/ASKTOM.download_file?p_file=6551378329289980701
> tem um script exemplo de como obter a diferença das stats de sessão...
>   SE os planos forem iguais ou equivalentes E as estats do CBO estiverem
> bem, vc pode considerar eventualmente setar na sessão o gerenciamento de
> PGA manual (vc não diz mas MUITO PROVAVELMENTE nesse banco ele deve estar
> automático) e maanualmente setar uma SORT_AREA_SIZE (e uma HASH_AREA_SIZE,
> se ffor o caso) anormalmente maiores e medir de novo...
>
> Caso nenhuma das linhas de teste/investigação acima resulte, aí a gente
> chega nas questões de hardware : ocorre que a diferença única entre
> executar o mesmo SQL no cliente e no servidor é o tráfego de rede
> obviamente maior no primeiro caso - aí a gente chega no nível de se pedir
> um TRACE+TKPROF nas duas execuções pra gente ter uma mensuração mais exata
> dos WAITs de rede envolvidos...
>
>   []s
>
> Chiappa
>  
>



-- 
--
Thanks,
* Ricardo Arnoud*

*Bacharel em Ciência da Computação* - 2013/1





(51) 8205-4658 TIM / (51) 9259-2333 CLARO / Porto Alegre - RS
http://www.ricardoarnoud.com
http://www.alterdatabaseopen.com
FB http://www.facebook.com/ricardo.arnoud
Linkedin http://br.linkedin.com/pub/ricardo-arnoud/15/127/3b1


[oracle_br] Re: Order by

2015-04-13 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Hmmm... Quando vc fala que executando no servidor roda em segundos e no cliente 
roda em minutos, vc TEM CERTEZA que está testando MAÇÃ com MAÇÃ, ie : é  
EXATAMENTE O MESMO SQL , com ** EXATAMENTE O MESMO *** texto, com 
EXATAMENTE OS MESMOS bindings  Basta um mínimo binding diferente para se 
obter planos diferentes, em alguns casos... 

Se for MESMO SQLs iguaizinhos até o último detalhee taanto lá no cliente quanto 
aqui no servidor, qual é o plano de execução ** real ** (ie, não é pedir um 
EXPLAIN PLAN, mas sim o plano que REALMENTE foi usado, extraído do cache com 
DBMS_XPLAN.DISPLAY_CURSOR e INCLUINDO as estatísticas de uso do SQL) , tanto lá 
quanto cá ??? 

==> Se forem planos diferentes para RIGOROSAMENTE O MESMO SQL, aí pergunto : as 
estatísticas do CBO estão OK , as colunas A-ROWS e E-ROWS fazem sentido ?? E a 
DIFERENÇA das estatísticas de sessão (ie, o resultado datual menos o anterior), 
é interessante se ccoletar, também ... Se vc não sabe como, 
http://rwijk.blogspot.com.br/2008/03/dbmsxplandisplaycursor.html dá um overview 
na obtenção de planos e 
https://asktom.oracle.com/pls/apex/ASKTOM.download_file?p_file=6551378329289980701
 tem um script exemplo de como obter a diferença das stats de sessão...
  SE os planos forem iguais ou equivalentes E as estats do CBO estiverem bem, 
vc pode considerar eventualmente setar na sessão o gerenciamento de PGA manual 
(vc não diz mas MUITO PROVAVELMENTE nesse banco ele deve estar automático) e 
maanualmente setar uma SORT_AREA_SIZE (e uma HASH_AREA_SIZE, se ffor o caso) 
anormalmente maiores e medir de novo...
  
Caso nenhuma das linhas de teste/investigação acima resulte, aí a gente chega 
nas questões de hardware : ocorre que a diferença única entre executar o mesmo 
SQL no cliente e no servidor é o tráfego de rede obviamente maior no primeiro 
caso - aí a gente chega no nível de se pedir um TRACE+TKPROF nas duas execuções 
pra gente ter uma mensuração mais exata dos WAITs de rede envolvidos...

  []s
  
Chiappa

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-06 Por tôpico Mauricio Lobão
> Caio,
> >> > > >
> >> > > > Eu preciso de todos os dadoseu faço um loop percorrendo as
> >> partições
> >> > > de uma tabela e inserindo nesta temporaria...que irá retornar o cursor
> >> com
> >> > > todos estes dados ordenados...
> >> > > >
> >> > > >
> >> > > > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> >> > > > DATA_RETIRADA_INICIAL VARCHAR2,
> >> > > > DATA_RETIRADA_FINAL VARCHAR2,
> >> > > > OUT_SERVICE OUT REF_CURSOR)
> >> > > >
> >> > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,
> >> > > TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS,
> >> MSISDN
> >> > > FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA,
> >> BNF_NR
> >> > > ';
> >> > > >
> >> > > > Quando fui realizar o trace deu o seguinte erro:
> >> > > > SQL> set autot on
> >> > > > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role
> >> is
> >> > > enabled
> >> > > > SP2-0611: Error enabling STATISTICS report
> >> > > >
> >> > > > Abs
> >> > > >
> >> > > > --- Em 
> >> > > > oracle_br@yahoogrupos.com.br >> 40yahoogrupos.com.br>,
> >> > > Caio Spadafora  escreveu
> >> > > > >
> >> > > > > Mauricio,
> >> > > > >
> >> > > > > Nesse caso, considerando que a lógica utilizada é a unica
> >> > > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão
> >> seria
> >> > > utilizar uma tabela particionada pelo campo de data, mas mesmo assim,
> >> se
> >> > > você precisasse de TODOS os registros de nada adiantaria.
> >> > > > >
> >> > > > > Antes de executar um trace, explique um pouco mais do fluxo de
> >> dados.
> >> > > > >
> >> > > > > Você monta essa tabela temporario, busca os 4 milhões de registros
> >> > > ordenados por um determinado conjunto de colunas e depois faz o que
> >> com os
> >> > > dados?
> >> > > > >
> >> > > > > Você conhece o conceito de IOT?
> >> > > > >
> >> > > > > Atenciosamente,
> >> > > > > Caio Spadafora.
> >> > > > > http://0011brothers.blogspot.com/
> >> > > > >
> >> > > > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> >> > > > >
> >> > > > > De: Mauricio Lobão 
> >> > > > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI
> >> registro.
> >> > > Como fazer ?
> >> > > > > Para: 
> >> > > > > oracle_br@yahoogrupos.com.br >> 40yahoogrupos.com.br>
> >>
> >> > > > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > > Eu preciso retornar um cursor com esses dados da tabela temporaria
> >> > > ordenados por este campo...
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD
> >> > > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X
> >> ORDER BY
> >> > > DATARETIRADA, BNF_NR ';
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > > Abs
> >> > > > >
> >> > > > >
> >> > > > >
> >> > > > > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa
> >> >

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-04 Por tôpico alex . kirsten
 > > > Caio,
>> > > > >
>> > > > > Eu preciso de todos os dadoseu faço um loop percorrendo as
>> > partições
>> > > > de uma tabela e inserindo nesta temporaria...que irá retornar o cursor
>> > com
>> > > > todos estes dados ordenados...
>> > > > >
>> > > > >
>> > > > > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
>> > > > > DATA_RETIRADA_INICIAL VARCHAR2,
>> > > > > DATA_RETIRADA_FINAL VARCHAR2,
>> > > > > OUT_SERVICE OUT REF_CURSOR)
>> > > > >
>> > > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,
>> > > > TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS,
>> > MSISDN
>> > > > FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA,
>> > BNF_NR
>> > > > ';
>> > > > >
>> > > > > Quando fui realizar o trace deu o seguinte erro:
>> > > > > SQL> set autot on
>> > > > > SP2-0618: Cannot find the Session Identifier. Check   
>> PLUSTRACE role is
>> > > > enabled
>> > > > > SP2-0611: Error enabling STATISTICS report
>> > > > >
>> > > > > Abs
>> > > > >
>> > > > > --- Em oracle_br@yahoogrupos.com.br   
>> > > 40yahoogrupos.com.br>,
>> > > > Caio Spadafora  escreveu
>> > > > > >
>> > > > > > Mauricio,
>> > > > > >
>> > > > > > Nesse caso, considerando que a lógica utilizada é a unica
>> > > > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão
>> > seria
>> > > > utilizar uma tabela particionada pelo campo de data, mas mesmo assim,
>> > se
>> > > > você precisasse de TODOS os registros de nada adiantaria.
>> > > > > >
>> > > > > > Antes de executar um trace, explique um pouco mais do fluxo de
>> > dados.
>> > > > > >
>> > > > > > Você monta essa tabela temporario, busca os 4 milhões de registros
>> > > > ordenados por um determinado conjunto de colunas e depois faz  
>>  o que com
>> > os
>> > > > dados?
>> > > > > >
>> > > > > > Você conhece o conceito de IOT?
>> > > > > >
>> > > > > > Atenciosamente,
>> > > > > > Caio Spadafora.
>> > > > > > http://0011brothers.blogspot.com/
>> > > > > >
>> > > > > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
>> > > > > >
>> > > > > > De: Mauricio Lobão 
>> > > > > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI
>> > registro.
>> > > > Como fazer ?
>> > > > > > Para:   
>> oracle_br@yahoogrupos.com.br> > 40yahoogrupos.com.br>
>> >
>> > > > > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > Eu preciso retornar um cursor com esses dados da tabela temporaria
>> > > > ordenados por este campo...
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD
>> > > > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM   
>> X ORDER
>> > BY
>> > > > DATARETIRADA, BNF_NR ';
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > Abs
>> > > > > >
>> > > > > >
>> > > > > >
>> > > > > > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa
>> > > >  escrev

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-04 Por tôpico jlchiappa
gt; > > Quando fui realizar o trace deu o seguinte erro:
> > > > > SQL> set autot on
> > > > > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is
> > > > enabled
> > > > > SP2-0611: Error enabling STATISTICS report
> > > > >
> > > > > Abs
> > > > >
> > > > > --- Em oracle_br@yahoogrupos.com.br 
> > > > >  > 40yahoogrupos.com.br>,
> > > > Caio Spadafora  escreveu
> > > > > >
> > > > > > Mauricio,
> > > > > >
> > > > > > Nesse caso, considerando que a lógica utilizada é a unica
> > > > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão
> > seria
> > > > utilizar uma tabela particionada pelo campo de data, mas mesmo assim,
> > se
> > > > você precisasse de TODOS os registros de nada adiantaria.
> > > > > >
> > > > > > Antes de executar um trace, explique um pouco mais do fluxo de
> > dados.
> > > > > >
> > > > > > Você monta essa tabela temporario, busca os 4 milhões de registros
> > > > ordenados por um determinado conjunto de colunas e depois faz o que com
> > os
> > > > dados?
> > > > > >
> > > > > > Você conhece o conceito de IOT?
> > > > > >
> > > > > > Atenciosamente,
> > > > > > Caio Spadafora.
> > > > > > http://0011brothers.blogspot.com/
> > > > > >
> > > > > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> > > > > >
> > > > > > De: Mauricio Lobão 
> > > > > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI
> > registro.
> > > > Como fazer ?
> > > > > > Para: 
> > > > > > oracle_br@yahoogrupos.com.br > 40yahoogrupos.com.br>
> >
> > > > > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > Eu preciso retornar um cursor com esses dados da tabela temporaria
> > > > ordenados por este campo...
> > > > > >
> > > > > >
> > > > > >
> > > > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD
> > > > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER
> > BY
> > > > DATARETIRADA, BNF_NR ';
> > > > > >
> > > > > >
> > > > > >
> > > > > > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
> > > > > >
> > > > > >
> > > > > >
> > > > > > Abs
> > > > > >
> > > > > >
> > > > > >
> > > > > > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa
> > > >  escreveu
> > > > > >
> > > > > > >
> > > > > >
> > > > > > > no sqlplus:
> > > > > >
> > > > > > > set timing on
> > > > > >
> > > > > > > set autot on
> > > > > >
> > > > > > >
> > > > > >
> > > > > > > para testar i plano sem executar a consulta:
> > > > > >
> > > > > > >
> > > > > >
> > > > > > > set autot traceonly explain
> > > > > >
> > > > > > >
> > > > > >
> > > > > > > 2009/4/3 Júlio César Corrêa 
> > > > > >
> > > > > > >
> > > > > >
> > > > > > > > NAO.
> > > > > >
> > > > > > > > Porque você ordenaria?
> > > > > >
> > > > > > > > Tem que ter uma justificativa bem elaborada para tal.
> > > > > >
> > > > > > > >
> > > > > &g

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-04 Por tôpico Júlio César Corrêa
e erro:
>> > > > SQL> set autot on
>> > > > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role
>> is
>> > > enabled
>> > > > SP2-0611: Error enabling STATISTICS report
>> > > >
>> > > > Abs
>> > > >
>> > > > --- Em 
>> > > > oracle_br@yahoogrupos.com.br> 40yahoogrupos.com.br>,
>> > > Caio Spadafora  escreveu
>> > > > >
>> > > > > Mauricio,
>> > > > >
>> > > > > Nesse caso, considerando que a lógica utilizada é a unica
>> > > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão
>> seria
>> > > utilizar uma tabela particionada pelo campo de data, mas mesmo assim,
>> se
>> > > você precisasse de TODOS os registros de nada adiantaria.
>> > > > >
>> > > > > Antes de executar um trace, explique um pouco mais do fluxo de
>> dados.
>> > > > >
>> > > > > Você monta essa tabela temporario, busca os 4 milhões de registros
>> > > ordenados por um determinado conjunto de colunas e depois faz o que
>> com os
>> > > dados?
>> > > > >
>> > > > > Você conhece o conceito de IOT?
>> > > > >
>> > > > > Atenciosamente,
>> > > > > Caio Spadafora.
>> > > > > http://0011brothers.blogspot.com/
>> > > > >
>> > > > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
>> > > > >
>> > > > > De: Mauricio Lobão 
>> > > > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI
>> registro.
>> > > Como fazer ?
>> > > > > Para: 
>> > > > > oracle_br@yahoogrupos.com.br> 40yahoogrupos.com.br>
>>
>> > > > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> > > > > Eu preciso retornar um cursor com esses dados da tabela temporaria
>> > > ordenados por este campo...
>> > > > >
>> > > > >
>> > > > >
>> > > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD
>> > > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X
>> ORDER BY
>> > > DATARETIRADA, BNF_NR ';
>> > > > >
>> > > > >
>> > > > >
>> > > > > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
>> > > > >
>> > > > >
>> > > > >
>> > > > > Abs
>> > > > >
>> > > > >
>> > > > >
>> > > > > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa
>> > >  escreveu
>> > > > >
>> > > > > >
>> > > > >
>> > > > > > no sqlplus:
>> > > > >
>> > > > > > set timing on
>> > > > >
>> > > > > > set autot on
>> > > > >
>> > > > > >
>> > > > >
>> > > > > > para testar i plano sem executar a consulta:
>> > > > >
>> > > > > >
>> > > > >
>> > > > > > set autot traceonly explain
>> > > > >
>> > > > > >
>> > > > >
>> > > > > > 2009/4/3 Júlio César Corrêa 
>> > > > >
>> > > > > >
>> > > > >
>> > > > > > > NAO.
>> > > > >
>> > > > > > > Porque você ordenaria?
>> > > > >
>> > > > > > > Tem que ter uma justificativa bem elaborada para tal.
>> > > > >
>> > > > > > >
>> > > > >
>> > > > > > > Após o seu loop percorrer e tal,e você colocar os seus
>> registros em
>> > > > >
>> > > > > > > memória,o que você faz com estes 4MI de registros?
>> > > > >
>> > > > &g

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-04 Por tôpico Júlio César Corrêa
Chiappa,
Se o nosso amigo arrancar esta query da aplicação,isso não seria nem
tuning.Seria um caso de reescrever a query.
Acerto de codigo é tuning ?Em partes sim,pq o codigo pdoe não ser dele.
Poderia informar a ele o ganho que ele teria,sem precisar ordenar uma query
com 4 MI de registros?O tempo que vai baixar na execução total,pode até
mostrar o antes e depois p gerente dele.Vai ganhar um café rs.

Metotologia K.I.S.S no SQL ajuda e muito.

Abs,


2009/4/4 jlchiappa 

>   Julio, eu também questionaria essa necessidade de ordenar : vejamos, uma
> tabela temporária tipicamente é criada para guardar TODOS os registros que a
> sessão vai manipular, uma temp via de regra VAI TER QUE SER LIDA do começo
> ao fim - ora, já que todos os registros TEM que serem processados, não
> importa a ordem física, qual a difereça de processar registros ordenados ou
> não ??? Sem ordem ou com ela, no final da rotina não lemos os registros
> todos ?? É uma necessidade meio "estranha" ESSA...
>
> []s
>
> Chiappa
>
> --- Em oracle_br@yahoogrupos.com.br ,
> Júlio César Corrêa  escreveu
>
> >
> > Estou com o Mr.Caio.
> > Mas responde aqui:
> >
> > Para que ordenar as linhas?
> > Por o usuário pediu,não vale.Ele não sabe o que o Oracle tem que fazer
> para
> > ordenar as benditas 4 MI linhas.
> > Mesmo que for para arquivo texto e ser importao depois em outro "país"
> rs, a
> > aplicação deveria ordenar os dados.Até pq sei que é dificil e bem dificil
> > achar alguem que manipulará estes 4 MI ordenados.
> >
> > Se vc passar o fluxi de dados,disendo para onde ele vai.Poderemos afirmar
> > que não é necessário ordenar nada.
> >
> >
> > 2009/4/3 Elcio 
> >
> > > Mauricio,
> > >
> > > Voce utiliza essa tabela temporaria exclusivamente para esse
> > > processo(query)?
> > >
> > > Essa tabela possui outras colunas além das que aparecem no codigo
> abaixo?
> > >
> > > Caso a opção do IOT, que Caio comentou, não seja viável, uma outra
> opção
> > > seria incluir as outras colunas que voce utiliza no indice. Detalhe
> > > importante que o indice deverá iniciar com as colunas do seu ORDER BY
> > > respeitando a ordem.
> > >
> > > Com isso, certificar que no plano de execução esta utilizando FFS (Fast
> > > Full Scan) no indice sem acessar a tabela propriamente dita.
> > >
> > > Espero que ajude.
> > >
> > > []´s
> > >
> > > --- Em oracle_br@yahoogrupos.com.br 
> > >  40yahoogrupos.com.br>,
> > > Mauricio Lobão  escreveu
> > >
> > > >
> > > > Caio,
> > > >
> > > > Eu preciso de todos os dadoseu faço um loop percorrendo as
> partições
> > > de uma tabela e inserindo nesta temporaria...que irá retornar o cursor
> com
> > > todos estes dados ordenados...
> > > >
> > > >
> > > > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> > > > DATA_RETIRADA_INICIAL VARCHAR2,
> > > > DATA_RETIRADA_FINAL VARCHAR2,
> > > > OUT_SERVICE OUT REF_CURSOR)
> > > >
> > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,
> > > TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS,
> MSISDN
> > > FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA,
> BNF_NR
> > > ';
> > > >
> > > > Quando fui realizar o trace deu o seguinte erro:
> > > > SQL> set autot on
> > > > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is
> > > enabled
> > > > SP2-0611: Error enabling STATISTICS report
> > > >
> > > > Abs
> > > >
> > > > --- Em oracle_br@yahoogrupos.com.br 
> > > >  40yahoogrupos.com.br>,
> > > Caio Spadafora  escreveu
> > > > >
> > > > > Mauricio,
> > > > >
> > > > > Nesse caso, considerando que a lógica utilizada é a unica
> > > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão
> seria
> > > utilizar uma tabela particionada pelo campo de data, mas mesmo assim,
> se
> > > você precisasse de TODOS os registros de nada adiantaria.
> > > > >
> > > > > Antes de executar um trace, explique um pouco mais do fluxo de
> dados.
> > > > >
> > > > > Você monta essa tabela temporario, busca os 4 milhões de registros
> > > ordenados por um determinado conjunto de colunas e depois faz o que com
> os

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-04 Por tôpico Mauricio Lobão
Eu preciso que sejnisam ordenados...pois vou devolver este cursor para uma 
aplicação que ira gerar o arquivo com um determinado layout..e esta aplicação 
nao tem um mecanismo que ordene os registros...sei que os usuários nao tem 
noção no esforço para realizar tao tarefa pelo Oracle...porem podemos pesquisar 
uma forma que possa atende-lo...

Abs

--- Em oracle_br@yahoogrupos.com.br, "jlchiappa"  escreveu
>
> Julio, eu também questionaria essa necessidade de ordenar : vejamos, uma 
> tabela temporária tipicamente é criada para guardar TODOS os registros que a 
> sessão vai manipular, uma temp via de regra VAI TER QUE SER LIDA do começo ao 
> fim - ora, já que todos os registros TEM que serem processados, não importa a 
> ordem física, qual a difereça de processar registros ordenados ou não ??? Sem 
> ordem ou com ela, no final da rotina não lemos os registros todos ?? É uma 
> necessidade meio "estranha" ESSA...
> 
> []s
> 
>  Chiappa
> 
> --- Em oracle_br@yahoogrupos.com.br, Júlio César Corrêa  
> escreveu
> >
> > Estou com o Mr.Caio.
> > Mas responde aqui:
> > 
> > Para que ordenar as linhas?
> > Por o usuário pediu,não vale.Ele não sabe o que o Oracle tem que fazer para
> > ordenar as benditas 4 MI linhas.
> > Mesmo que for para arquivo texto e ser importao depois em outro "país" rs, a
> > aplicação deveria ordenar os dados.Até pq sei que é dificil e bem dificil
> > achar alguem que manipulará estes 4 MI ordenados.
> > 
> > Se vc passar o fluxi de dados,disendo para onde ele vai.Poderemos afirmar
> > que não é necessário ordenar nada.
> > 
> > 
> > 2009/4/3 Elcio 
> > 
> > >   Mauricio,
> > >
> > > Voce utiliza essa tabela temporaria exclusivamente para esse
> > > processo(query)?
> > >
> > > Essa tabela possui outras colunas além das que aparecem no codigo abaixo?
> > >
> > > Caso a opção do IOT, que Caio comentou, não seja viável, uma outra opção
> > > seria incluir as outras colunas que voce utiliza no indice. Detalhe
> > > importante que o indice deverá iniciar com as colunas do seu ORDER BY
> > > respeitando a ordem.
> > >
> > > Com isso, certificar que no plano de execução esta utilizando FFS (Fast
> > > Full Scan) no indice sem acessar a tabela propriamente dita.
> > >
> > > Espero que ajude.
> > >
> > > []´s
> > >
> > > --- Em oracle_br@yahoogrupos.com.br ,
> > > Mauricio Lobão  escreveu
> > >
> > > >
> > > > Caio,
> > > >
> > > > Eu preciso de todos os dadoseu faço um loop percorrendo as partições
> > > de uma tabela e inserindo nesta temporaria...que irá retornar o cursor com
> > > todos estes dados ordenados...
> > > >
> > > >
> > > > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> > > > DATA_RETIRADA_INICIAL VARCHAR2,
> > > > DATA_RETIRADA_FINAL VARCHAR2,
> > > > OUT_SERVICE OUT REF_CURSOR)
> > > >
> > > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,
> > > TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN
> > > FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR
> > > ';
> > > >
> > > > Quando fui realizar o trace deu o seguinte erro:
> > > > SQL> set autot on
> > > > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is
> > > enabled
> > > > SP2-0611: Error enabling STATISTICS report
> > > >
> > > > Abs
> > > >
> > > > --- Em oracle_br@yahoogrupos.com.br ,
> > > Caio Spadafora  escreveu
> > > > >
> > > > > Mauricio,
> > > > >
> > > > > Nesse caso, considerando que a lógica utilizada é a unica
> > > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão 
> > > seria
> > > utilizar uma tabela particionada pelo campo de data, mas mesmo assim, se
> > > você precisasse de TODOS os registros de nada adiantaria.
> > > > >
> > > > > Antes de executar um trace, explique um pouco mais do fluxo de dados.
> > > > >
> > > > > Você monta essa tabela temporario, busca os 4 milhões de registros
> > > ordenados por um determinado conjunto de colunas e depois faz o que com os
> > > dados?
> > > > >
> > > > > Você conhece o conceito de IOT?
> > > > >
> >

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-04 Por tôpico Caio Spadafora
Uma alternativa tambem é brincar com a blocagem.

Tente verificar os parametros relacionados a blocagem, sugiro analisar o 
db_file_multiblock_count.

Se quiser entender melhor:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0P11_QUESTION_ID:499197100346264909

[]'s
Caio Spadafora.
http://0011brothers.blogspot.com/

--- Em sáb, 4/4/09, jlchiappa  escreveu:

De: jlchiappa 
Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
fazer ?
Para: oracle_br@yahoogrupos.com.br
Data: Sábado, 4 de Abril de 2009, 18:34












Julio, eu também questionaria essa necessidade de ordenar : 
vejamos, uma tabela temporária tipicamente é criada para guardar TODOS os 
registros que a sessão vai manipular, uma temp via de regra VAI TER QUE SER 
LIDA do começo ao fim - ora, já que todos os registros TEM que serem 
processados, não importa a ordem física, qual a difereça de processar registros 
ordenados ou não ??? Sem ordem ou com ela, no final da rotina não lemos os 
registros todos ?? É uma necessidade meio "estranha" ESSA...



[]s



Chiappa



--- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  
escreveu

>

> Estou com o Mr.Caio.

> Mas responde aqui:

> 

> Para que ordenar as linhas?

> Por o usuário pediu,não vale.Ele não sabe o que o Oracle tem que fazer para

> ordenar as benditas 4 MI linhas.

> Mesmo que for para arquivo texto e ser importao depois em outro "país" rs, a

> aplicação deveria ordenar os dados.Até pq sei que é dificil e bem dificil

> achar alguem que manipulará estes 4 MI ordenados.

> 

> Se vc passar o fluxi de dados,disendo para onde ele vai.Poderemos afirmar

> que não é necessário ordenar nada.

> 

> 

> 2009/4/3 Elcio 

> 

> >   Mauricio,

> >

> > Voce utiliza essa tabela temporaria exclusivamente para esse

> > processo(query) ?

> >

> > Essa tabela possui outras colunas além das que aparecem no codigo abaixo?

> >

> > Caso a opção do IOT, que Caio comentou, não seja viável, uma outra opção

> > seria incluir as outras colunas que voce utiliza no indice. Detalhe

> > importante que o indice deverá iniciar com as colunas do seu ORDER BY

> > respeitando a ordem.

> >

> > Com isso, certificar que no plano de execução esta utilizando FFS (Fast

> > Full Scan) no indice sem acessar a tabela propriamente dita.

> >

> > Espero que ajude.

> >

> > []´s

> >

> > --- Em oracle...@yahoogrup os.com.br ,

> > Mauricio Lobão  escreveu

> >

> > >

> > > Caio,

> > >

> > > Eu preciso de todos os dadoseu faço um loop percorrendo as partições

> > de uma tabela e inserindo nesta temporaria.. .que irá retornar o cursor com

> > todos estes dados ordenados...

> > >

> > >

> > > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,

> > > DATA_RETIRADA_ INICIAL VARCHAR2,

> > > DATA_RETIRADA_ FINAL VARCHAR2,

> > > OUT_SERVICE OUT REF_CURSOR)

> > >

> > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,

> > TO_CHAR(DATARETIRAD A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN

> > FROM ADMINPROV2_10. MED_RETIRADA_ PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR

> > ';

> > >

> > > Quando fui realizar o trace deu o seguinte erro:

> > > SQL> set autot on

> > > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is

> > enabled

> > > SP2-0611: Error enabling STATISTICS report

> > >

> > > Abs

> > >

> > > --- Em oracle...@yahoogrup os.com.br ,

> > Caio Spadafora  escreveu

> > > >

> > > > Mauricio,

> > > >

> > > > Nesse caso, considerando que a lógica utilizada é a unica

> > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão seria

> > utilizar uma tabela particionada pelo campo de data, mas mesmo assim, se

> > você precisasse de TODOS os registros de nada adiantaria.

> > > >

> > > > Antes de executar um trace, explique um pouco mais do fluxo de dados.

> > > >

> > > > Você monta essa tabela temporario, busca os 4 milhões de registros

> > ordenados por um determinado conjunto de colunas e depois faz o que com os

> > dados?

> > > >

> > > > Você conhece o conceito de IOT?

> > > >

> > > > Atenciosamente,

> > > > Caio Spadafora.

> > > > http://0011brothers .blogspot. com/

> > > >

> > > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:

> > > >

> > > > De: Mauricio Lobão 

>

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-04 Por tôpico jlchiappa
Julio, eu também questionaria essa necessidade de ordenar : vejamos, uma tabela 
temporária tipicamente é criada para guardar TODOS os registros que a sessão 
vai manipular, uma temp via de regra VAI TER QUE SER LIDA do começo ao fim - 
ora, já que todos os registros TEM que serem processados, não importa a ordem 
física, qual a difereça de processar registros ordenados ou não ??? Sem ordem 
ou com ela, no final da rotina não lemos os registros todos ?? É uma 
necessidade meio "estranha" ESSA...

[]s

 Chiappa

--- Em oracle_br@yahoogrupos.com.br, Júlio César Corrêa  
escreveu
>
> Estou com o Mr.Caio.
> Mas responde aqui:
> 
> Para que ordenar as linhas?
> Por o usuário pediu,não vale.Ele não sabe o que o Oracle tem que fazer para
> ordenar as benditas 4 MI linhas.
> Mesmo que for para arquivo texto e ser importao depois em outro "país" rs, a
> aplicação deveria ordenar os dados.Até pq sei que é dificil e bem dificil
> achar alguem que manipulará estes 4 MI ordenados.
> 
> Se vc passar o fluxi de dados,disendo para onde ele vai.Poderemos afirmar
> que não é necessário ordenar nada.
> 
> 
> 2009/4/3 Elcio 
> 
> >   Mauricio,
> >
> > Voce utiliza essa tabela temporaria exclusivamente para esse
> > processo(query)?
> >
> > Essa tabela possui outras colunas além das que aparecem no codigo abaixo?
> >
> > Caso a opção do IOT, que Caio comentou, não seja viável, uma outra opção
> > seria incluir as outras colunas que voce utiliza no indice. Detalhe
> > importante que o indice deverá iniciar com as colunas do seu ORDER BY
> > respeitando a ordem.
> >
> > Com isso, certificar que no plano de execução esta utilizando FFS (Fast
> > Full Scan) no indice sem acessar a tabela propriamente dita.
> >
> > Espero que ajude.
> >
> > []´s
> >
> > --- Em oracle_br@yahoogrupos.com.br ,
> > Mauricio Lobão  escreveu
> >
> > >
> > > Caio,
> > >
> > > Eu preciso de todos os dadoseu faço um loop percorrendo as partições
> > de uma tabela e inserindo nesta temporaria...que irá retornar o cursor com
> > todos estes dados ordenados...
> > >
> > >
> > > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> > > DATA_RETIRADA_INICIAL VARCHAR2,
> > > DATA_RETIRADA_FINAL VARCHAR2,
> > > OUT_SERVICE OUT REF_CURSOR)
> > >
> > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,
> > TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN
> > FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR
> > ';
> > >
> > > Quando fui realizar o trace deu o seguinte erro:
> > > SQL> set autot on
> > > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is
> > enabled
> > > SP2-0611: Error enabling STATISTICS report
> > >
> > > Abs
> > >
> > > --- Em oracle_br@yahoogrupos.com.br ,
> > Caio Spadafora  escreveu
> > > >
> > > > Mauricio,
> > > >
> > > > Nesse caso, considerando que a lógica utilizada é a unica
> > possibilidade, você vai ter que atuar em outras camadas. Uma sugestão seria
> > utilizar uma tabela particionada pelo campo de data, mas mesmo assim, se
> > você precisasse de TODOS os registros de nada adiantaria.
> > > >
> > > > Antes de executar um trace, explique um pouco mais do fluxo de dados.
> > > >
> > > > Você monta essa tabela temporario, busca os 4 milhões de registros
> > ordenados por um determinado conjunto de colunas e depois faz o que com os
> > dados?
> > > >
> > > > Você conhece o conceito de IOT?
> > > >
> > > > Atenciosamente,
> > > > Caio Spadafora.
> > > > http://0011brothers.blogspot.com/
> > > >
> > > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> > > >
> > > > De: Mauricio Lobão 
> > > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro.
> > Como fazer ?
> > > > Para: oracle_br@yahoogrupos.com.br 
> > > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > Eu preciso retornar um cursor com esses dados da tabela temporaria
> > ordenados por este campo...
> > > >
> > > >
> > > >
> > > > OPEN OUT_SERVICE FOR

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico alex . kirsten
Olá,

Esse é um daqueles casos que um hint vai muito bem.

create index xyz on  
ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP(DATARETIRADA, BNF_NR);


SELECT /*+ INDEX(ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP xyz) */  
BNF_NR, PREMIO, TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS  
DATARETIRADA, STATUS, MSISDN FROM  
ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP

Execute e nos mostre o que vai retornar. Caso retorne fora de ordem,  
tente alterar os parametros optimizer_index_caching e  
optimizer_index_cost_adj.

Na maioria dos bancos por ae esses valores estao como 0 para o  
optimizer_index_caching e 100 para o optimizer_index_cost_adj. Tente  
mudar o optimizer_index_caching para 25 e optimizer_index_cost_adj  
para 90 (Sugestão do Tom). Mas só faça isso se necessários. Esses  
valores podem ser definidos por sessão.

Boa Sorte

Alex


Citando Júlio César Corrêa :

> Estou com o Mr.Caio.
> Mas responde aqui:
>
> Para que ordenar as linhas?
> Por o usuário pediu,não vale.Ele não sabe o que o Oracle tem que fazer para
> ordenar as benditas 4 MI linhas.
> Mesmo que for para arquivo texto e ser importao depois em outro "país" rs, a
> aplicação deveria ordenar os dados.Até pq sei que é dificil e bem dificil
> achar alguem que manipulará estes 4 MI ordenados.
>
> Se vc passar o fluxi de dados,disendo para onde ele vai.Poderemos afirmar
> que não é necessário ordenar nada.
>
>
> 2009/4/3 Elcio 
>
>>   Mauricio,
>>
>> Voce utiliza essa tabela temporaria exclusivamente para esse
>> processo(query)?
>>
>> Essa tabela possui outras colunas além das que aparecem no codigo abaixo?
>>
>> Caso a opção do IOT, que Caio comentou, não seja viável, uma outra opção
>> seria incluir as outras colunas que voce utiliza no indice. Detalhe
>> importante que o indice deverá iniciar com as colunas do seu ORDER BY
>> respeitando a ordem.
>>
>> Com isso, certificar que no plano de execução esta utilizando FFS (Fast
>> Full Scan) no indice sem acessar a tabela propriamente dita.
>>
>> Espero que ajude.
>>
>> []´s
>>
>> --- Em oracle_br@yahoogrupos.com.br ,
>> Mauricio Lobão  escreveu
>>
>> >
>> > Caio,
>> >
>> > Eu preciso de todos os dadoseu faço um loop percorrendo as partições
>> de uma tabela e inserindo nesta temporaria...que irá retornar o cursor com
>> todos estes dados ordenados...
>> >
>> >
>> > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
>> > DATA_RETIRADA_INICIAL VARCHAR2,
>> > DATA_RETIRADA_FINAL VARCHAR2,
>> > OUT_SERVICE OUT REF_CURSOR)
>> >
>> > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,
>> TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN
>> FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR
>> ';
>> >
>> > Quando fui realizar o trace deu o seguinte erro:
>> > SQL> set autot on
>> > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is
>> enabled
>> > SP2-0611: Error enabling STATISTICS report
>> >
>> > Abs
>> >
>> > --- Em oracle_br@yahoogrupos.com.br ,
>> Caio Spadafora  escreveu
>> > >
>> > > Mauricio,
>> > >
>> > > Nesse caso, considerando que a lógica utilizada é a unica
>> possibilidade, você vai ter que atuar em outras camadas. Uma sugestão seria
>> utilizar uma tabela particionada pelo campo de data, mas mesmo assim, se
>> você precisasse de TODOS os registros de nada adiantaria.
>> > >
>> > > Antes de executar um trace, explique um pouco mais do fluxo de dados.
>> > >
>> > > Você monta essa tabela temporario, busca os 4 milhões de registros
>> ordenados por um determinado conjunto de colunas e depois faz o que com os
>> dados?
>> > >
>> > > Você conhece o conceito de IOT?
>> > >
>> > > Atenciosamente,
>> > > Caio Spadafora.
>> > > http://0011brothers.blogspot.com/
>> > >
>> > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
>> > >
>> > > De: Mauricio Lobão 
>> > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro.
>> Como fazer ?
>> > > Para: oracle_br@yahoogrupos.com.br 
>> > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > >
>> > > Eu preciso re

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Júlio César Corrêa
Estou com o Mr.Caio.
Mas responde aqui:

Para que ordenar as linhas?
Por o usuário pediu,não vale.Ele não sabe o que o Oracle tem que fazer para
ordenar as benditas 4 MI linhas.
Mesmo que for para arquivo texto e ser importao depois em outro "país" rs, a
aplicação deveria ordenar os dados.Até pq sei que é dificil e bem dificil
achar alguem que manipulará estes 4 MI ordenados.

Se vc passar o fluxi de dados,disendo para onde ele vai.Poderemos afirmar
que não é necessário ordenar nada.


2009/4/3 Elcio 

>   Mauricio,
>
> Voce utiliza essa tabela temporaria exclusivamente para esse
> processo(query)?
>
> Essa tabela possui outras colunas além das que aparecem no codigo abaixo?
>
> Caso a opção do IOT, que Caio comentou, não seja viável, uma outra opção
> seria incluir as outras colunas que voce utiliza no indice. Detalhe
> importante que o indice deverá iniciar com as colunas do seu ORDER BY
> respeitando a ordem.
>
> Com isso, certificar que no plano de execução esta utilizando FFS (Fast
> Full Scan) no indice sem acessar a tabela propriamente dita.
>
> Espero que ajude.
>
> []´s
>
> --- Em oracle_br@yahoogrupos.com.br ,
> Mauricio Lobão  escreveu
>
> >
> > Caio,
> >
> > Eu preciso de todos os dadoseu faço um loop percorrendo as partições
> de uma tabela e inserindo nesta temporaria...que irá retornar o cursor com
> todos estes dados ordenados...
> >
> >
> > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> > DATA_RETIRADA_INICIAL VARCHAR2,
> > DATA_RETIRADA_FINAL VARCHAR2,
> > OUT_SERVICE OUT REF_CURSOR)
> >
> > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO,
> TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN
> FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR
> ';
> >
> > Quando fui realizar o trace deu o seguinte erro:
> > SQL> set autot on
> > SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is
> enabled
> > SP2-0611: Error enabling STATISTICS report
> >
> > Abs
> >
> > --- Em oracle_br@yahoogrupos.com.br ,
> Caio Spadafora  escreveu
> > >
> > > Mauricio,
> > >
> > > Nesse caso, considerando que a lógica utilizada é a unica
> possibilidade, você vai ter que atuar em outras camadas. Uma sugestão seria
> utilizar uma tabela particionada pelo campo de data, mas mesmo assim, se
> você precisasse de TODOS os registros de nada adiantaria.
> > >
> > > Antes de executar um trace, explique um pouco mais do fluxo de dados.
> > >
> > > Você monta essa tabela temporario, busca os 4 milhões de registros
> ordenados por um determinado conjunto de colunas e depois faz o que com os
> dados?
> > >
> > > Você conhece o conceito de IOT?
> > >
> > > Atenciosamente,
> > > Caio Spadafora.
> > > http://0011brothers.blogspot.com/
> > >
> > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> > >
> > > De: Mauricio Lobão 
> > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro.
> Como fazer ?
> > > Para: oracle_br@yahoogrupos.com.br 
> > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > Eu preciso retornar um cursor com esses dados da tabela temporaria
> ordenados por este campo...
> > >
> > >
> > >
> > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD
> A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY
> DATARETIRADA, BNF_NR ';
> > >
> > >
> > >
> > > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
> > >
> > >
> > >
> > > Abs
> > >
> > >
> > >
> > > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa
>  escreveu
> > >
> > > >
> > >
> > > > no sqlplus:
> > >
> > > > set timing on
> > >
> > > > set autot on
> > >
> > > >
> > >
> > > > para testar i plano sem executar a consulta:
> > >
> > > >
> > >
> > > > set autot traceonly explain
> > >
> > > >
> > >
> > > > 2009/4/3 Júlio César Corrêa 
> > >
> > > >
> > >
> > > > > NAO.
> > >
> > > > > Porque você ordenaria?
> > >
&

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Mauricio Lobão
Elcio,

Essa tabela temporaria é exclusiva para este processo.

A tabela só possui estas colunas que estao na query abaixo.

Ainda preciso analisar a solução do IOT, precisaria de um exemplo de 
implementação para entender melhor.

Com a inclusão das outras colunas da tabela...eu garanto a ordenação que 
preciso?

Obrigado pela ajuda.

[]'s

--- Em oracle_br@yahoogrupos.com.br, "Elcio"  escreveu
>
> Mauricio,
> 
> Voce utiliza essa tabela temporaria exclusivamente para esse processo(query)?
> 
> Essa tabela possui outras colunas além das que aparecem no codigo abaixo?
> 
> Caso a opção do IOT, que Caio comentou, não seja viável, uma outra opção 
> seria incluir as outras colunas que voce utiliza no indice. Detalhe 
> importante que o indice deverá iniciar com as colunas do seu ORDER BY 
> respeitando a ordem.
> 
> Com isso, certificar que no plano de execução esta utilizando FFS (Fast Full 
> Scan) no indice sem acessar a tabela propriamente dita.
> 
> Espero que ajude.
> 
> []´s
> 
> --- Em oracle_br@yahoogrupos.com.br, Mauricio Lobão  escreveu
> >
> > Caio,
> > 
> > Eu preciso de todos os dadoseu faço um loop percorrendo as partições de 
> > uma tabela e inserindo nesta temporaria...que irá retornar o cursor com 
> > todos estes dados ordenados...
> > 
> > 
> > PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> > DATA_RETIRADA_INICIAL VARCHAR2,
> > DATA_RETIRADA_FINAL VARCHAR2,
> > OUT_SERVICE OUT REF_CURSOR)
> > 
> > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, 
> > TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN 
> > FROM ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR 
> > ';
> > 
> > Quando fui realizar o trace deu o seguinte erro:
> > SQL> set autot on
> > SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is 
> > enabled
> > SP2-0611: Error enabling STATISTICS report
> > 
> > Abs
> > 
> > --- Em oracle_br@yahoogrupos.com.br, Caio Spadafora  
> > escreveu
> > >
> > > Mauricio,
> > > 
> > > Nesse caso, considerando que a lógica utilizada é a unica possibilidade, 
> > > você vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma 
> > > tabela particionada pelo campo de data, mas mesmo assim, se você 
> > > precisasse de TODOS os registros de nada adiantaria.
> > > 
> > > Antes de executar um trace, explique um pouco mais do fluxo de dados.
> > > 
> > > Você monta essa tabela temporario, busca os 4 milhões de registros 
> > > ordenados por um determinado conjunto de colunas e depois faz o que com 
> > > os dados?
> > > 
> > > Você conhece o conceito de IOT?
> > > 
> > > Atenciosamente,
> > > Caio Spadafora.
> > > http://0011brothers.blogspot.com/
> > > 
> > > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> > > 
> > > De: Mauricio Lobão 
> > > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. 
> > > Como fazer ?
> > > Para: oracle_br@yahoogrupos.com.br
> > > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > Eu preciso retornar um cursor com esses dados da tabela 
> > > temporaria ordenados por este campo...
> > > 
> > > 
> > > 
> > > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> > > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER 
> > > BY DATARETIRADA, BNF_NR ';
> > > 
> > > 
> > > 
> > > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
> > > 
> > > 
> > > 
> > > Abs
> > > 
> > > 
> > > 
> > > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  > > ...> escreveu
> > > 
> > > >
> > > 
> > > > no sqlplus:
> > > 
> > > > set timing on
> > > 
> > > > set autot on
> > > 
> > > > 
> > > 
> > > > para testar i plano sem executar a consulta:
> > > 
> > > > 
> > > 
> > > > set autot traceonly explain
> > > 
> > > > 
> > > 
> > 

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Elcio
Mauricio,

Voce utiliza essa tabela temporaria exclusivamente para esse processo(query)?

Essa tabela possui outras colunas além das que aparecem no codigo abaixo?

Caso a opção do IOT, que Caio comentou, não seja viável, uma outra opção seria 
incluir as outras colunas que voce utiliza no indice. Detalhe importante que o 
indice deverá iniciar com as colunas do seu ORDER BY respeitando a ordem.

Com isso, certificar que no plano de execução esta utilizando FFS (Fast Full 
Scan) no indice sem acessar a tabela propriamente dita.

Espero que ajude.

[]´s

--- Em oracle_br@yahoogrupos.com.br, Mauricio Lobão  
escreveu
>
> Caio,
> 
> Eu preciso de todos os dadoseu faço um loop percorrendo as partições de 
> uma tabela e inserindo nesta temporaria...que irá retornar o cursor com todos 
> estes dados ordenados...
> 
> 
> PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> DATA_RETIRADA_INICIAL VARCHAR2,
> DATA_RETIRADA_FINAL VARCHAR2,
> OUT_SERVICE OUT REF_CURSOR)
> 
> OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, 
> TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN FROM 
> ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR ';
> 
> Quando fui realizar o trace deu o seguinte erro:
> SQL> set autot on
> SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
> SP2-0611: Error enabling STATISTICS report
> 
> Abs
> 
> --- Em oracle_br@yahoogrupos.com.br, Caio Spadafora  escreveu
> >
> > Mauricio,
> > 
> > Nesse caso, considerando que a lógica utilizada é a unica possibilidade, 
> > você vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma 
> > tabela particionada pelo campo de data, mas mesmo assim, se você precisasse 
> > de TODOS os registros de nada adiantaria.
> > 
> > Antes de executar um trace, explique um pouco mais do fluxo de dados.
> > 
> > Você monta essa tabela temporario, busca os 4 milhões de registros 
> > ordenados por um determinado conjunto de colunas e depois faz o que com os 
> > dados?
> > 
> > Você conhece o conceito de IOT?
> > 
> > Atenciosamente,
> > Caio Spadafora.
> > http://0011brothers.blogspot.com/
> > 
> > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> > 
> > De: Mauricio Lobão 
> > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
> > fazer ?
> > Para: oracle_br@yahoogrupos.com.br
> > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > Eu preciso retornar um cursor com esses dados da tabela 
> > temporaria ordenados por este campo...
> > 
> > 
> > 
> > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY 
> > DATARETIRADA, BNF_NR ';
> > 
> > 
> > 
> > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
> > 
> > 
> > 
> > Abs
> > 
> > 
> > 
> > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  > ...> escreveu
> > 
> > >
> > 
> > > no sqlplus:
> > 
> > > set timing on
> > 
> > > set autot on
> > 
> > > 
> > 
> > > para testar i plano sem executar a consulta:
> > 
> > > 
> > 
> > > set autot traceonly explain
> > 
> > > 
> > 
> > > 2009/4/3 Júlio César Corrêa 
> > 
> > > 
> > 
> > > > NAO.
> > 
> > > > Porque você ordenaria?
> > 
> > > > Tem que ter uma justificativa bem elaborada para tal.
> > 
> > > >
> > 
> > > > Após o seu loop percorrer e tal,e você colocar os seus registros em
> > 
> > > > memória,o que você faz com estes 4MI de registros?
> > 
> > > >
> > 
> > > > O Oracle simplesmente vai tentar ordenar todas os 4 MILHOES de 
> > > > registros em
> > 
> > > > memória ,caso não consiga,vai fazer isso em disco(segmento da tablespace
> > 
> > > > temporária).
> > 
> > > >
> > 
> > > > Você tem um loop que faz o processamento linha a linha ok?
> > 
> > > > Não há possibilidade de colocá-lo em lotes ou blocos e inseri-los?Usando
> > 
> > > > Bulk e tal ?
> > 
> > > >
> > 
>

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Mauricio Lobão
Não retorna erro...apenas demoram horas para que o cursor seja 
devolvido..devido a ordenação...faço o acompanhamento realizando um count na 
tabela temporaria...qdo chega em 4 milhoes que a quantidade de dados que existe 
para o periodo que solicitei e sai do loop...ja fiz o teste com menos 
registros...e o cursor é devolvido...o tempo para realizar o insert na 
temporario é menor que o tempo de ordenação

Todos os registros pq sao esses que existem para o periodo que 
solicitei...ordenada pq o usuário solicitou que fosse assim..nesta 
ordem...rs...Estes dados vao para uma aplicação que recebe este cursor e gera 
um arquivo texto...não posso gerar o arquivo utilizando outra coisa, ele tem 
que passar por esta aplicação...

Abs
--- Em oracle_br@yahoogrupos.com.br, Caio Spadafora  escreveu
>
> Que erro esta retornando quando você faz essa consulta da maneira como você 
> está fazendo?
> 
> Você pode abrir por que você precisa consultar todos os registros e ainda por 
> que precisa ser de forma ordenada? A partir desse momento para onde vão esses 
> dados? (te pergunto isso, pois talvez assim conseguimos entender melhor o 
> leque de opções que temos para otimizar a consulta, se é que ela precisa ser 
> otimizada)
> 
> 
> --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> 
> De: Mauricio Lobão 
> Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
> fazer ?
> Para: oracle_br@yahoogrupos.com.br
> Data: Sexta-feira, 3 de Abril de 2009, 19:38
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Caio,
> 
> 
> 
> Eu preciso de todos os dadoseu faço um loop percorrendo as partições de 
> uma tabela e inserindo nesta temporaria.. .que irá retornar o cursor com 
> todos estes dados ordenados...
> 
> 
> 
> PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> 
> DATA_RETIRADA_ INICIAL VARCHAR2,
> 
> DATA_RETIRADA_ FINAL VARCHAR2,
> 
> OUT_SERVICE OUT REF_CURSOR)
> 
> 
> 
> OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM ADMINPROV2_10. 
> MED_RETIRADA_ PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR ';
> 
> 
> 
> Quando fui realizar o trace deu o seguinte erro:
> 
> SQL> set autot on
> 
> SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
> 
> SP2-0611: Error enabling STATISTICS report
> 
> 
> 
> Abs
> 
> 
> 
> --- Em oracle...@yahoogrup os.com.br, Caio Spadafora  
> escreveu
> 
> >
> 
> > Mauricio,
> 
> > 
> 
> > Nesse caso, considerando que a lógica utilizada é a unica possibilidade, 
> > você vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma 
> > tabela particionada pelo campo de data, mas mesmo assim, se você precisasse 
> > de TODOS os registros de nada adiantaria.
> 
> > 
> 
> > Antes de executar um trace, explique um pouco mais do fluxo de dados.
> 
> > 
> 
> > Você monta essa tabela temporario, busca os 4 milhões de registros 
> > ordenados por um determinado conjunto de colunas e depois faz o que com os 
> > dados?
> 
> > 
> 
> > Você conhece o conceito de IOT?
> 
> > 
> 
> > Atenciosamente,
> 
> > Caio Spadafora.
> 
> > http://0011brothers .blogspot. com/
> 
> > 
> 
> > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> 
> > 
> 
> > De: Mauricio Lobão 
> 
> > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
> > fazer ?
> 
> > Para: oracle...@yahoogrup os.com.br
> 
> > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > 
> 
> > Eu preciso retornar um cursor com esses dados da tabela 
> > temporaria ordenados por este campo...
> 
> > 
> 
> > 
> 
> > 
> 
> > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY 
> > DATARETIRADA, BNF_NR ';
> 
> > 
> 
> > 
> 
> > 
> 
> > Ja utilizo Bulk para realizar a inserção na tabela temporaria.. . ..
> 
> > 
> 
> > 
> 
> > 
> 
> > Abs
> 
> > 
> 
> > 
> 
> > 
> 
> > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  > ...> escreveu
> 
> &g

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Caio Spadafora
http://www.oracle.com/technology/products/oracle9i/datasheets/iots/iot_ds.html

--- Em sex, 3/4/09, Mauricio Lobão  escreveu:

De: Mauricio Lobão 
Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
fazer ?
Para: oracle_br@yahoogrupos.com.br
Data: Sexta-feira, 3 de Abril de 2009, 19:40












Ahh...não conheço o conceito de IOT...tem algum lugar onde possa 
aprender ?



--- Em oracle...@yahoogrup os.com.br, Mauricio Lobão  
escreveu

>

> Caio,

> 

> Eu preciso de todos os dadoseu faço um loop percorrendo as partições de 
> uma tabela e inserindo nesta temporaria.. .que irá retornar o cursor com 
> todos estes dados ordenados...

> 

> 

> PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,

> DATA_RETIRADA_ INICIAL VARCHAR2,

> DATA_RETIRADA_ FINAL VARCHAR2,

> OUT_SERVICE OUT REF_CURSOR)

> 

> OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM ADMINPROV2_10. 
> MED_RETIRADA_ PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR ';

> 

> Quando fui realizar o trace deu o seguinte erro:

> SQL> set autot on

> SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled

> SP2-0611: Error enabling STATISTICS report

> 

> Abs

> 

> --- Em oracle...@yahoogrup os.com.br, Caio Spadafora  
> escreveu

> >

> > Mauricio,

> > 

> > Nesse caso, considerando que a lógica utilizada é a unica possibilidade, 
> > você vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma 
> > tabela particionada pelo campo de data, mas mesmo assim, se você precisasse 
> > de TODOS os registros de nada adiantaria.

> > 

> > Antes de executar um trace, explique um pouco mais do fluxo de dados..

> > 

> > Você monta essa tabela temporario, busca os 4 milhões de registros 
> > ordenados por um determinado conjunto de colunas e depois faz o que com os 
> > dados?

> > 

> > Você conhece o conceito de IOT?

> > 

> > Atenciosamente,

> > Caio Spadafora.

> > http://0011brothers .blogspot. com/

> > 

> > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:

> > 

> > De: Mauricio Lobão 

> > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
> > fazer ?

> > Para: oracle...@yahoogrup os.com.br

> > Data: Sexta-feira, 3 de Abril de 2009, 19:16

> > 

> > 

> > 

> > 

> > 

> > 

> > 

> > 

> > 

> > 

> > 

> > 

> > Eu preciso retornar um cursor com esses dados da tabela 
> > temporaria ordenados por este campo...

> > 

> > 

> > 

> > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY 
> > DATARETIRADA, BNF_NR ';

> > 

> > 

> > 

> > Ja utilizo Bulk para realizar a inserção na tabela temporaria.. .. .

> > 

> > 

> > 

> > Abs

> > 

> > 

> > 

> > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  > ...> escreveu

> > 

> > >

> > 

> > > no sqlplus:

> > 

> > > set timing on

> > 

> > > set autot on

> > 

> > > 

> > 

> > > para testar i plano sem executar a consulta:

> > 

> > > 

> > 

> > > set autot traceonly explain

> > 

> > > 

> > 

> > > 2009/4/3 Júlio César Corrêa 

> > 

> > > 

> > 

> > > > NAO.

> > 

> > > > Porque você ordenaria?

> > 

> > > > Tem que ter uma justificativa bem elaborada para tal.

> > 

> > > >

> > 

> > > > Após o seu loop percorrer e tal,e você colocar os seus registros em

> > 

> > > > memória,o que você faz com estes 4MI de registros?

> > 

> > > >

> > 

> > > > O Oracle simplesmente vai tentar ordenar todas os 4 MILHOES de 
> > > > registros em

> > 

> > > > memória ,caso não consiga,vai fazer isso em disco(segmento da tablespace

> > 

> > > > temporária).

> > 

> > > >

> > 

> > > > Você tem um loop que faz o processamento linha a linha ok?

> > 

> > > > Não há possibilidade de colocá-lo em lotes ou blocos e inseri-los?Usando

> > 

> > > > Bulk e tal ?

> > 

> > > >

> &

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Caio Spadafora
Que erro esta retornando quando você faz essa consulta da maneira como você 
está fazendo?

Você pode abrir por que você precisa consultar todos os registros e ainda por 
que precisa ser de forma ordenada? A partir desse momento para onde vão esses 
dados? (te pergunto isso, pois talvez assim conseguimos entender melhor o leque 
de opções que temos para otimizar a consulta, se é que ela precisa ser 
otimizada)


--- Em sex, 3/4/09, Mauricio Lobão  escreveu:

De: Mauricio Lobão 
Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
fazer ?
Para: oracle_br@yahoogrupos.com.br
Data: Sexta-feira, 3 de Abril de 2009, 19:38












Caio,



Eu preciso de todos os dadoseu faço um loop percorrendo as partições de uma 
tabela e inserindo nesta temporaria.. .que irá retornar o cursor com todos 
estes dados ordenados...



PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,

DATA_RETIRADA_ INICIAL VARCHAR2,

DATA_RETIRADA_ FINAL VARCHAR2,

OUT_SERVICE OUT REF_CURSOR)



OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM ADMINPROV2_10. 
MED_RETIRADA_ PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR ';



Quando fui realizar o trace deu o seguinte erro:

SQL> set autot on

SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled

SP2-0611: Error enabling STATISTICS report



Abs



--- Em oracle...@yahoogrup os.com.br, Caio Spadafora  
escreveu

>

> Mauricio,

> 

> Nesse caso, considerando que a lógica utilizada é a unica possibilidade, você 
> vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma tabela 
> particionada pelo campo de data, mas mesmo assim, se você precisasse de TODOS 
> os registros de nada adiantaria.

> 

> Antes de executar um trace, explique um pouco mais do fluxo de dados.

> 

> Você monta essa tabela temporario, busca os 4 milhões de registros ordenados 
> por um determinado conjunto de colunas e depois faz o que com os dados?

> 

> Você conhece o conceito de IOT?

> 

> Atenciosamente,

> Caio Spadafora.

> http://0011brothers .blogspot. com/

> 

> --- Em sex, 3/4/09, Mauricio Lobão  escreveu:

> 

> De: Mauricio Lobão 

> Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
> fazer ?

> Para: oracle...@yahoogrup os.com.br

> Data: Sexta-feira, 3 de Abril de 2009, 19:16

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> 

> Eu preciso retornar um cursor com esses dados da tabela 
> temporaria ordenados por este campo...

> 

> 

> 

> OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY 
> DATARETIRADA, BNF_NR ';

> 

> 

> 

> Ja utilizo Bulk para realizar a inserção na tabela temporaria.. . ..

> 

> 

> 

> Abs

> 

> 

> 

> --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  
> escreveu

> 

> >

> 

> > no sqlplus:

> 

> > set timing on

> 

> > set autot on

> 

> > 

> 

> > para testar i plano sem executar a consulta:

> 

> > 

> 

> > set autot traceonly explain

> 

> > 

> 

> > 2009/4/3 Júlio César Corrêa 

> 

> > 

> 

> > > NAO.

> 

> > > Porque você ordenaria?

> 

> > > Tem que ter uma justificativa bem elaborada para tal.

> 

> > >

> 

> > > Após o seu loop percorrer e tal,e você colocar os seus registros em

> 

> > > memória,o que você faz com estes 4MI de registros?

> 

> > >

> 

> > > O Oracle simplesmente vai tentar ordenar todas os 4 MILHOES de registros 
> > > em

> 

> > > memória ,caso não consiga,vai fazer isso em disco(segmento da tablespace

> 

> > > temporária).

> 

> > >

> 

> > > Você tem um loop que faz o processamento linha a linha ok?

> 

> > > Não há possibilidade de colocá-lo em lotes ou blocos e inseri-los?Usando

> 

> > > Bulk e tal ?

> 

> > >

> 

> > > Vai um link para você dar uma olhada e ver se pode usar algo parecido.Na

> 

> > > internet tem varios exemplos,site da oracle ou a galera do grupo pode 
> > > ajudar

> 

> > > quando tiver sem um norte.

> 

> > >

> 

> > > http://mportes. blogspot. com/2007/ 03/bulk-collect_ 12.html

> 

> > >

> 

> > > Dependendo do que você faz,poderia usar

> 

> > >  2009/4/3 Mauricio Lobão 

> 

> > 

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Mauricio Lobão
Ahh...não conheço o conceito de IOT...tem algum lugar onde possa aprender ?

--- Em oracle_br@yahoogrupos.com.br, Mauricio Lobão  
escreveu
>
> Caio,
> 
> Eu preciso de todos os dadoseu faço um loop percorrendo as partições de 
> uma tabela e inserindo nesta temporaria...que irá retornar o cursor com todos 
> estes dados ordenados...
> 
> 
> PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
> DATA_RETIRADA_INICIAL VARCHAR2,
> DATA_RETIRADA_FINAL VARCHAR2,
> OUT_SERVICE OUT REF_CURSOR)
> 
> OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, 
> TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN FROM 
> ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR ';
> 
> Quando fui realizar o trace deu o seguinte erro:
> SQL> set autot on
> SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
> SP2-0611: Error enabling STATISTICS report
> 
> Abs
> 
> --- Em oracle_br@yahoogrupos.com.br, Caio Spadafora  escreveu
> >
> > Mauricio,
> > 
> > Nesse caso, considerando que a lógica utilizada é a unica possibilidade, 
> > você vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma 
> > tabela particionada pelo campo de data, mas mesmo assim, se você precisasse 
> > de TODOS os registros de nada adiantaria.
> > 
> > Antes de executar um trace, explique um pouco mais do fluxo de dados.
> > 
> > Você monta essa tabela temporario, busca os 4 milhões de registros 
> > ordenados por um determinado conjunto de colunas e depois faz o que com os 
> > dados?
> > 
> > Você conhece o conceito de IOT?
> > 
> > Atenciosamente,
> > Caio Spadafora.
> > http://0011brothers.blogspot.com/
> > 
> > --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> > 
> > De: Mauricio Lobão 
> > Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
> > fazer ?
> > Para: oracle_br@yahoogrupos.com.br
> > Data: Sexta-feira, 3 de Abril de 2009, 19:16
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > Eu preciso retornar um cursor com esses dados da tabela 
> > temporaria ordenados por este campo...
> > 
> > 
> > 
> > OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> > A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY 
> > DATARETIRADA, BNF_NR ';
> > 
> > 
> > 
> > Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
> > 
> > 
> > 
> > Abs
> > 
> > 
> > 
> > --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  > ...> escreveu
> > 
> > >
> > 
> > > no sqlplus:
> > 
> > > set timing on
> > 
> > > set autot on
> > 
> > > 
> > 
> > > para testar i plano sem executar a consulta:
> > 
> > > 
> > 
> > > set autot traceonly explain
> > 
> > > 
> > 
> > > 2009/4/3 Júlio César Corrêa 
> > 
> > > 
> > 
> > > > NAO.
> > 
> > > > Porque você ordenaria?
> > 
> > > > Tem que ter uma justificativa bem elaborada para tal.
> > 
> > > >
> > 
> > > > Após o seu loop percorrer e tal,e você colocar os seus registros em
> > 
> > > > memória,o que você faz com estes 4MI de registros?
> > 
> > > >
> > 
> > > > O Oracle simplesmente vai tentar ordenar todas os 4 MILHOES de 
> > > > registros em
> > 
> > > > memória ,caso não consiga,vai fazer isso em disco(segmento da tablespace
> > 
> > > > temporária).
> > 
> > > >
> > 
> > > > Você tem um loop que faz o processamento linha a linha ok?
> > 
> > > > Não há possibilidade de colocá-lo em lotes ou blocos e inseri-los?Usando
> > 
> > > > Bulk e tal ?
> > 
> > > >
> > 
> > > > Vai um link para você dar uma olhada e ver se pode usar algo parecido.Na
> > 
> > > > internet tem varios exemplos,site da oracle ou a galera do grupo pode 
> > > > ajudar
> > 
> > > > quando tiver sem um norte.
> > 
> > > >
> > 
> > > > http://mportes. blogspot. com/2007/ 03/bulk-collect_ 12.html
> > 
> > > >
> > 
> > > &

[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Mauricio Lobão
Caio,

Eu preciso de todos os dadoseu faço um loop percorrendo as partições de uma 
tabela e inserindo nesta temporaria...que irá retornar o cursor com todos estes 
dados ordenados...


PROCEDURE RETIRADA_PREMIOS( QUEUE_CODE VARCHAR2,
DATA_RETIRADA_INICIAL VARCHAR2,
DATA_RETIRADA_FINAL VARCHAR2,
OUT_SERVICE OUT REF_CURSOR)

OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, 
TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN FROM 
ADMINPROV2_10.MED_RETIRADA_PREMIOS_TEMP ORDER BY DATARETIRADA, BNF_NR ';

Quando fui realizar o trace deu o seguinte erro:
SQL> set autot on
SP2-0618: Cannot find the Session Identifier.  Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report

Abs

--- Em oracle_br@yahoogrupos.com.br, Caio Spadafora  escreveu
>
> Mauricio,
> 
> Nesse caso, considerando que a lógica utilizada é a unica possibilidade, você 
> vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma tabela 
> particionada pelo campo de data, mas mesmo assim, se você precisasse de TODOS 
> os registros de nada adiantaria.
> 
> Antes de executar um trace, explique um pouco mais do fluxo de dados.
> 
> Você monta essa tabela temporario, busca os 4 milhões de registros ordenados 
> por um determinado conjunto de colunas e depois faz o que com os dados?
> 
> Você conhece o conceito de IOT?
> 
> Atenciosamente,
> Caio Spadafora.
> http://0011brothers.blogspot.com/
> 
> --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> 
> De: Mauricio Lobão 
> Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
> fazer ?
> Para: oracle_br@yahoogrupos.com.br
> Data: Sexta-feira, 3 de Abril de 2009, 19:16
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Eu preciso retornar um cursor com esses dados da tabela 
> temporaria ordenados por este campo...
> 
> 
> 
> OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
> A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY 
> DATARETIRADA, BNF_NR ';
> 
> 
> 
> Ja utilizo Bulk para realizar a inserção na tabela temporaria... .
> 
> 
> 
> Abs
> 
> 
> 
> --- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  
> escreveu
> 
> >
> 
> > no sqlplus:
> 
> > set timing on
> 
> > set autot on
> 
> > 
> 
> > para testar i plano sem executar a consulta:
> 
> > 
> 
> > set autot traceonly explain
> 
> > 
> 
> > 2009/4/3 Júlio César Corrêa 
> 
> > 
> 
> > > NAO.
> 
> > > Porque você ordenaria?
> 
> > > Tem que ter uma justificativa bem elaborada para tal.
> 
> > >
> 
> > > Após o seu loop percorrer e tal,e você colocar os seus registros em
> 
> > > memória,o que você faz com estes 4MI de registros?
> 
> > >
> 
> > > O Oracle simplesmente vai tentar ordenar todas os 4 MILHOES de registros 
> > > em
> 
> > > memória ,caso não consiga,vai fazer isso em disco(segmento da tablespace
> 
> > > temporária).
> 
> > >
> 
> > > Você tem um loop que faz o processamento linha a linha ok?
> 
> > > Não há possibilidade de colocá-lo em lotes ou blocos e inseri-los?Usando
> 
> > > Bulk e tal ?
> 
> > >
> 
> > > Vai um link para você dar uma olhada e ver se pode usar algo parecido.Na
> 
> > > internet tem varios exemplos,site da oracle ou a galera do grupo pode 
> > > ajudar
> 
> > > quando tiver sem um norte.
> 
> > >
> 
> > > http://mportes. blogspot. com/2007/ 03/bulk-collect_ 12.html
> 
> > >
> 
> > > Dependendo do que você faz,poderia usar
> 
> > >  2009/4/3 Mauricio Lobão 
> 
> > >
> 
> > >   Pessoal,
> 
> > >>
> 
> > >> To com um problema...to precisando otimizar a performance de uma
> 
> > >> rotina...existe uma query em cima de uma tabela temporaria que possui 4
> 
> > >> milhoes de registros... a tabela é indexada por estes dois campos
> 
> > >> (DATARETIRADA, BNF_NR) que são utilizados na ordenação.
> 
> > >>
> 
> > >> Minha dúvida...é necessário realizar a ordenação na tabela já que possui
> 
> > >> este indice ? O insert nesta tabela é feito através de um loop que 
> > >> percorre
> 
> > >> as partições de uma tabela e insere nesta temporaria.
> 
> > >>
> 
> > >> Alguem tem outra solução para este 

Re: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Caio Spadafora
Mauricio,

Nesse caso, considerando que a lógica utilizada é a unica possibilidade, você 
vai ter que atuar em outras camadas. Uma sugestão seria utilizar uma tabela 
particionada pelo campo de data, mas mesmo assim, se você precisasse de TODOS 
os registros de nada adiantaria.

Antes de executar um trace, explique um pouco mais do fluxo de dados.

Você monta essa tabela temporario, busca os 4 milhões de registros ordenados 
por um determinado conjunto de colunas e depois faz o que com os dados?

Você conhece o conceito de IOT?

Atenciosamente,
Caio Spadafora.
http://0011brothers.blogspot.com/

--- Em sex, 3/4/09, Mauricio Lobão  escreveu:

De: Mauricio Lobão 
Assunto: [oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como 
fazer ?
Para: oracle_br@yahoogrupos.com.br
Data: Sexta-feira, 3 de Abril de 2009, 19:16












Eu preciso retornar um cursor com esses dados da tabela temporaria 
ordenados por este campo...



OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD 
A,''MMDDHHMI SS'') AS DATARETIRADA, STATUS, MSISDN FROM X ORDER BY 
DATARETIRADA, BNF_NR ';



Ja utilizo Bulk para realizar a inserção na tabela temporaria... .



Abs



--- Em oracle...@yahoogrup os.com.br, Júlio César Corrêa  
escreveu

>

> no sqlplus:

> set timing on

> set autot on

> 

> para testar i plano sem executar a consulta:

> 

> set autot traceonly explain

> 

> 2009/4/3 Júlio César Corrêa 

> 

> > NAO.

> > Porque você ordenaria?

> > Tem que ter uma justificativa bem elaborada para tal.

> >

> > Após o seu loop percorrer e tal,e você colocar os seus registros em

> > memória,o que você faz com estes 4MI de registros?

> >

> > O Oracle simplesmente vai tentar ordenar todas os 4 MILHOES de registros em

> > memória ,caso não consiga,vai fazer isso em disco(segmento da tablespace

> > temporária).

> >

> > Você tem um loop que faz o processamento linha a linha ok?

> > Não há possibilidade de colocá-lo em lotes ou blocos e inseri-los?Usando

> > Bulk e tal ?

> >

> > Vai um link para você dar uma olhada e ver se pode usar algo parecido.Na

> > internet tem varios exemplos,site da oracle ou a galera do grupo pode ajudar

> > quando tiver sem um norte.

> >

> > http://mportes. blogspot. com/2007/ 03/bulk-collect_ 12.html

> >

> > Dependendo do que você faz,poderia usar

> >  2009/4/3 Mauricio Lobão 

> >

> >   Pessoal,

> >>

> >> To com um problema...to precisando otimizar a performance de uma

> >> rotina...existe uma query em cima de uma tabela temporaria que possui 4

> >> milhoes de registros... a tabela é indexada por estes dois campos

> >> (DATARETIRADA, BNF_NR) que são utilizados na ordenação.

> >>

> >> Minha dúvida...é necessário realizar a ordenação na tabela já que possui

> >> este indice ? O insert nesta tabela é feito através de um loop que percorre

> >> as partições de uma tabela e insere nesta temporaria.

> >>

> >> Alguem tem outra solução para este problema ?

> >>

> >> Indice:

> >> CREATE INDEX  ON X

> >> (DATARETIRADA, BNF_NR)

> >> NOLOGGING

> >> NOPARALLEL;

> >>

> >> Query:

> >> SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD A,''MMDDHHMI SS'') AS

> >> DATARETIRADA, STATUS FROM X ORDER BY DATARETIRADA, BNF_NR

> >>

> >> Agradeço desde já.

> >>

> >>  

> >>

> >

> >

> >

> > --

> > Júlio César Corrêa

> > IS Technologist - Oracle DBA

> > http://jccorrea. blogspot. com

> >

> > "To stay competitive in the tech industry, never stop

> > learning. Always be on the lookout for better ways of

> > doing things and new technologies. Our industry does

> > not reward people who let themselves stagnate"

> > –John Hall, Senior Vice President, Oracle University

> >

> >

> 

> 

> -- 

> Júlio César Corrêa

> IS Technologist - Oracle DBA

> http://jccorrea. blogspot. com

> 

> "To stay competitive in the tech industry, never stop

> learning. Always be on the lookout for better ways of

> doing things and new technologies. Our industry does

> not reward people who let themselves stagnate"

> –John Hall, Senior Vice President, Oracle University

> 

> 

> [As partes desta mensagem que não continham texto foram removidas]

>




 

  




 

















  Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com

[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Mauricio Lobão
Eu preciso retornar um cursor com esses dados da tabela temporaria ordenados 
por este campo...

OPEN OUT_SERVICE FOR 'SELECT BNF_NR, PREMIO, 
TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS DATARETIRADA, STATUS, MSISDN FROM 
X ORDER BY DATARETIRADA, BNF_NR ';

Ja utilizo Bulk para realizar a inserção na tabela temporaria...

Abs

--- Em oracle_br@yahoogrupos.com.br, Júlio César Corrêa  
escreveu
>
> no sqlplus:
> set timing on
> set autot on
> 
> para testar i plano sem executar a consulta:
> 
> set autot traceonly explain
> 
> 2009/4/3 Júlio César Corrêa 
> 
> > NAO.
> > Porque você ordenaria?
> > Tem que ter uma justificativa bem elaborada para tal.
> >
> > Após o seu loop percorrer e tal,e você colocar os seus registros em
> > memória,o que você faz com estes 4MI de registros?
> >
> > O Oracle simplesmente vai tentar ordenar todas os 4 MILHOES de registros em
> > memória ,caso não consiga,vai fazer isso em disco(segmento da tablespace
> > temporária).
> >
> > Você tem um loop que faz o processamento linha a linha ok?
> > Não há possibilidade de colocá-lo em lotes ou blocos e inseri-los?Usando
> > Bulk e tal ?
> >
> > Vai um link para você dar uma olhada e ver se pode usar algo parecido.Na
> > internet tem varios exemplos,site da oracle ou a galera do grupo pode ajudar
> > quando tiver sem um norte.
> >
> > http://mportes.blogspot.com/2007/03/bulk-collect_12.html
> >
> > Dependendo do que você faz,poderia usar
> >  2009/4/3 Mauricio Lobão 
> >
> >   Pessoal,
> >>
> >> To com um problema...to precisando otimizar a performance de uma
> >> rotina...existe uma query em cima de uma tabela temporaria que possui 4
> >> milhoes de registros...a tabela é indexada por estes dois campos
> >> (DATARETIRADA, BNF_NR) que são utilizados na ordenação.
> >>
> >> Minha dúvida...é necessário realizar a ordenação na tabela já que possui
> >> este indice ? O insert nesta tabela é feito através de um loop que percorre
> >> as partições de uma tabela e insere nesta temporaria.
> >>
> >> Alguem tem outra solução para este problema ?
> >>
> >> Indice:
> >> CREATE INDEX  ON X
> >> (DATARETIRADA, BNF_NR)
> >> NOLOGGING
> >> NOPARALLEL;
> >>
> >> Query:
> >> SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRADA,''MMDDHHMISS'') AS
> >> DATARETIRADA, STATUS FROM X ORDER BY DATARETIRADA, BNF_NR
> >>
> >> Agradeço desde já.
> >>
> >>  
> >>
> >
> >
> >
> > --
> > Júlio César Corrêa
> > IS Technologist - Oracle DBA
> > http://jccorrea.blogspot.com
> >
> > "To stay competitive in the tech industry, never stop
> > learning. Always be on the lookout for better ways of
> > doing things and new technologies. Our industry does
> > not reward people who let themselves stagnate"
> > –John Hall, Senior Vice President, Oracle University
> >
> >
> 
> 
> -- 
> Júlio César Corrêa
> IS Technologist - Oracle DBA
> http://jccorrea.blogspot.com
> 
> "To stay competitive in the tech industry, never stop
> learning. Always be on the lookout for better ways of
> doing things and new technologies. Our industry does
> not reward people who let themselves stagnate"
> –John Hall, Senior Vice President, Oracle University
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] Re: Order by tabela temporaria com 4 MI registro. Como fazer ?

2009-04-03 Por tôpico Mauricio Lobão
Caio,

Segue o plano de execução:

Plan
SELECT STATEMENT  CHOOSECost: 88,979  Bytes: 335.470.640  Cardinality: 
4.193.383
2 SORT ORDER BY  Cost: 88,979  Bytes: 335.470.640  Cardinality: 
4.193.383   
1 TABLE ACCESS FULL TABLE  Cost: 10,983  Bytes: 
335.470.640  Cardinality: 4.193.383  


Não sei como tirar o trace...se puder me ensinar..

Abraços,

Mauricio

--- Em oracle_br@yahoogrupos.com.br, Caio Spadafora  escreveu
>
> 
> Mauricio,
> 
> Você consegue nos enviar o plano de execução? Em relação a utilizar o índice 
> ou não vai depender de algumas coisas, como você faz acesso a todos as linhas 
> da tabela a utilização do índice pode não ser vantajosa, como são somente 
> quatro colunas de repente fazendo uso de IOT algum ganho de performance pode 
> existir mas precisariamos testar.
> 
> Mande o plano de execução, as vezes não teremos muito como otimizar o SQL, 
> existem hints como /*+ all_rows */ e se você tiver um tempo de FETCH alto 
> nessa consulta você pode aumentar o array_size do sql*plus (caso você esteja 
> visualizando esses dados nessa interface)... resumindo, mande o plano de 
> execução e se possivel o trace dessa consulta... ai talvez fique mais facil 
> de te ajudar.
> 
> []'s
> Caio Spadafora.
> http://0011brothers.blogspot.com/
> 
> --- Em sex, 3/4/09, Mauricio Lobão  escreveu:
> 
> De: Mauricio Lobão 
> Assunto: [oracle_br] Order by tabela temporaria com 4 MI registro. Como fazer 
> ?
> Para: oracle_br@yahoogrupos.com.br
> Data: Sexta-feira, 3 de Abril de 2009, 17:53
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Pessoal,
> 
> 
> 
> To com um problema...to precisando otimizar a performance de uma 
> rotinaexiste uma query em cima de uma tabela temporaria que possui 4 
> milhoes de registros... a tabela é indexada por estes dois campos 
> (DATARETIRADA, BNF_NR) que são utilizados na ordenação.
> 
> 
> 
> Minha dúvida...é necessário realizar a ordenação na tabela já que possui este 
> indice ? O insert nesta tabela é feito através de um loop que percorre as 
> partições de uma tabela e insere nesta temporaria.
> 
> 
> 
> Alguem tem outra solução para este problema ?
> 
> 
> 
> Indice:
> 
> CREATE INDEX  ON X
> 
> (DATARETIRADA, BNF_NR)
> 
> NOLOGGING
> 
> NOPARALLEL;
> 
> 
> 
> Query:
> 
> SELECT BNF_NR, PREMIO, TO_CHAR(DATARETIRAD A,''MMDDHHMI SS'') AS 
> DATARETIRADA, STATUS FROM X ORDER BY DATARETIRADA, BNF_NR
> 
> 
> 
> Agradeço desde já.
> 
> 
> 
> 
>  
> 
>   
> 
> 
> 
>   
>
>   
>   
> 
> 
> 
> 
> 
> 
> 
> 
>   
> 
> 
>   
>   
> 
> 
>   Veja quais são os assuntos do momento no Yahoo! +Buscados
> http://br.maisbuscados.yahoo.com
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




Re: [oracle_br] Re: Order by coluna alfanuméric a

2007-11-29 Por tôpico Roberto Amorim
>>> 1
>>> X1
>>> 1X
>>> 10
>>> __
>>>
>>> [ ]
>>>
>>> André
>>>
>>>
>>>
>>> Em 28/11/07, Roberto Amorim <[EMAIL 
>>> PROTECTED]>
>>>   
>> escreveu:
>> 
>>>> Só que o campo é cvarchar e tem string. Então retornará invalid number.
>>>> Não tem jeito mesmo. Só fazendo uma função como eu disse no outro
>>>> 
>> email.
>> 
>>>> Só que aí a consulta fica se arrastando.
>>>> A função percorreria toda a string e caso só houvesse números ela
>>>> aplicaria a máscara com o formato, tal como o Chiappa falou. Se
>>>> contivesse caracteres não numéricos ela retornaria a própria string,
>>>> 
>> sem
>> 
>>>> mudanças . A função seria apenas para a ordenação.
>>>> Roberto
>>>>
>>>> wilsonteixeira2000 escreveu:
>>>>
>>>> 
>>>>> Luiz Ribeiro, boa tarde!
>>>>>
>>>>>
>>>>> Existe um tecnica "POG" para atender este tipo de situação que atende
>>>>> muitas vezes. Adicionar caracteres a direita do valor ex:
>>>>>
>>>>> tabela A:
>>>>> Codigo varchar2 (2),
>>>>> nome varchar2(10)
>>>>>
>>>>> select * from a order by codigo
>>>>> codigo nome
>>>>> 1 teste
>>>>> 10 teste 10
>>>>> 2 teste 2
>>>>>
>>>>> select * from order by to_char(codigo,'00')
>>>>> codigo nome
>>>>> 1 teste
>>>>> 2 teste 2
>>>>> 10 teste 10
>>>>>
>>>>>
>>>>> --- Em oracle_br@yahoogrupos.com.br 
>>>>> ,
>>>>>
>>>>>   
>>>> "jlchiappa" <[EMAIL PROTECTED]>
>>>>
>>>> 
>>>>> escreveu
>>>>>
>>>>>
>>>>>   
>>>>>> Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
>>>>>> numérica, desprezando os caracteres ? Desprezar as linhas que
>>>>>> contenham não-números ? Transformar a porção da string que contém
>>>>>> dígitos em número ? E se houver , ou . entre os números, o que fazer
>>>>>> ?? Qual é a lógica que vc pretende ?
>>>>>>
>>>>>> []s
>>>>>>
>>>>>> Chiappa
>>>>>> --- Em oracle_br@yahoogrupos.com.br 
>>>>>> ,
>>>>>>
>>>>>> 
>>>> "Luiz Ribeiro" 
>>>>
>>>> 
>>>>>> escreveu
>>>>>>
>>>>>>
>>>>>> 
>>>>>>> Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
>>>>>>>
>>>>>>>
>>>>>>>   
>>>>>> também, não somente números.
>>>>>>
>>>>>>
>>>>>> 
>>>>>>> Obrigado.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 
>>>>>>>
>>>>>>> From: oracle_br@yahoogrupos.com.br 
>>>>>>> 
>>>>>>>
>>>>>>>
>>>>>>>   
>>>>>> [mailto:oracle_br@yahoogrupos.com.br 
>>>>>> ]
>>>>>>
>>>>>> 
>>>> On Behalf Of jlchiappa
>>>>
>>>> 
>>>>>>> Sent: quarta-feira, 28 de novembro de 2007 14:46
>>>>>>> To: oracle_br@yahoogrupos.com.br 
>>>>>>> 
>>>>>>> Subject: [oracle_br] Re: Order by coluna alfanumérica
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
>>>>>>>
>>>>>>> select nnn from TABELA order by to_char(to_number
>>>>>>>
>>>>>>>
>>>>>>>   
>>>>> (COLUNA), 'FM009');
>>>>>
>>>>>
>>>>>   
>>>>>>> 

Re: [oracle_br] Re: Order by coluna alfanumérica

2007-11-29 Por tôpico Andre Santos
teixeira2000 escreveu:
> >>
> >>> Luiz Ribeiro, boa tarde!
> >>>
> >>>
> >>> Existe um tecnica "POG" para atender este tipo de situação que atende
> >>> muitas vezes. Adicionar caracteres a direita do valor ex:
> >>>
> >>> tabela A:
> >>> Codigo varchar2 (2),
> >>> nome varchar2(10)
> >>>
> >>> select * from a order by codigo
> >>> codigo nome
> >>> 1 teste
> >>> 10 teste 10
> >>> 2 teste 2
> >>>
> >>> select * from order by to_char(codigo,'00')
> >>> codigo nome
> >>> 1 teste
> >>> 2 teste 2
> >>> 10 teste 10
> >>>
> >>>
> >>> --- Em oracle_br@yahoogrupos.com.br 
> >>> ,
> >>>
> >> "jlchiappa" <[EMAIL PROTECTED]>
> >>
> >>> escreveu
> >>>
> >>>
> >>>> Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
> >>>> numérica, desprezando os caracteres ? Desprezar as linhas que
> >>>> contenham não-números ? Transformar a porção da string que contém
> >>>> dígitos em número ? E se houver , ou . entre os números, o que fazer
> >>>> ?? Qual é a lógica que vc pretende ?
> >>>>
> >>>> []s
> >>>>
> >>>> Chiappa
> >>>> --- Em oracle_br@yahoogrupos.com.br 
> >>>> ,
> >>>>
> >> "Luiz Ribeiro" 
> >>
> >>>> escreveu
> >>>>
> >>>>
> >>>>> Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
> >>>>>
> >>>>>
> >>>> também, não somente números.
> >>>>
> >>>>
> >>>>> Obrigado.
> >>>>>
> >>>>>
> >>>>>
> >>>>> 
> >>>>>
> >>>>> From: oracle_br@yahoogrupos.com.br 
> >>>>> 
> >>>>>
> >>>>>
> >>>> [mailto:oracle_br@yahoogrupos.com.br 
> >>>> ]
> >>>>
> >> On Behalf Of jlchiappa
> >>
> >>>>> Sent: quarta-feira, 28 de novembro de 2007 14:46
> >>>>> To: oracle_br@yahoogrupos.com.br 
> >>>>> 
> >>>>> Subject: [oracle_br] Re: Order by coluna alfanumérica
> >>>>>
> >>>>>
> >>>>>
> >>>>> Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
> >>>>>
> >>>>> select nnn from TABELA order by to_char(to_number
> >>>>>
> >>>>>
> >>> (COLUNA), 'FM009');
> >>>
> >>>
> >>>>> ==> mas armazenar números em campos string SÓ PODE DAR n+1
> >>>>> probleminhas, desde performance até administração, recomendaria vc
> >>>>> parar IMEDIATAMENTE com essa prática, se minimamente possível...
> >>>>>
> >>>>> []s
> >>>>>
> >>>>> Chiappa
> >>>>>
> >>>>> --- Em oracle_br@yahoogrupos.com.br 
> >>>>> 
> >>>>>
> >>>>>
> >>>> <mailto:oracle_br%40yahoogrupos.com.br> , "Luiz Ribeiro"
> >>>>
> >>>>
> >>> 
> >>>
> >>>
> >>>>> escreveu
> >>>>>
> >>>>>
> >>>>>> Boa tarde.
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Já vi isso na lista, mas não estou conseguindo encontrar. Como
> >>>>>>
> >>>>>>
> >>> fazer
> >>>
> >>>
> >>>>> para que o resultado abaixo, com order by numa coluna varchar2:
> >>>>>
> >>>>>
> >>>>>> SQL> select coluna from tabela order by coluna;
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> 1
> >>>>>>
> >>>>>> --
> >>>>>>
> >>>>>> 1
> >>>>>>
> >>>>>> 10
> >>>>>>
> >>>>>> 2
> >>>>>>
> >>>>>> 20
> >>>>>>
> >>>>>> 3
> >>>>>>
> >>>>>> 30
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Tenha como resultado o seguinte:
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> SQL> select coluna from tabela order by coluna;
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> 1
> >>>>>>
> >>>>>> --
> >>>>>>
> >>>>>> 1
> >>>>>>
> >>>>>> 2
> >>>>>>
> >>>>>> 3
> >>>>>>
> >>>>>> 10
> >>>>>>
> >>>>>> 20
> >>>>>>
> >>>>>> 30
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Obrigado,
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> Luiz
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> [As partes desta mensagem que não continham texto foram
> >>>>>>
> >>>>>>
> >>> removidas]
> >>>
> >>>
> >>>>>
> >>>>>
> >>>>> [As partes desta mensagem que não continham texto foram removidas]
> >>>>>
> >>>>>
> >>>>>
> >>>
> >>>
> >>>
> >>>
> >>>> Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package »
> >>>>
> >> Procedure » Scripts » Tutoriais acesse:
> >> http://www.oraclebr.com.br/codigo/ListaCodigo.php
> >>
> >>> --
> >>>
> >>>
> >>>> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> >>>>
> >> inteira responsabilidade de seus remetentes.
> >>
> >>> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> >>> --
> >>>
> >>>
> >>>> O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE:
> >>>>
> >> http://www.oraclebr.com.br/
> >>
> >>> --
> >>> Links do Yahoo! Grupos
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>
> >>
> >
> >
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> >
> >
> >
> >> Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package »
> Procedure » Scripts » Tutoriais acesse:
> http://www.oraclebr.com.br/codigo/ListaCodigo.php
> >>
> > --
> >
> >> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de
> inteira responsabilidade de seus remetentes.
> >>
> > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> > --
> >
> >> O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE:
> http://www.oraclebr.com.br/
> >>
> > --
> > Links do Yahoo! Grupos
> >
> >
> >
> >
> >
>
> 
>


[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Re: Order by coluna alfanumérica

2007-11-29 Por tôpico lcg_ribeiro
Tenta aí:

SELECT codigo
FROM (SELECT '1' codigo FROM DUAL UNION
  SELECT '1A' FROM DUAL UNION
  SELECT 'A1' FROM DUAL UNION
  SELECT '2A' FROM DUAL UNION
  SELECT 'A2' FROM DUAL UNION
  SELECT '11A' FROM DUAL UNION
  SELECT '22A' FROM DUAL UNION
  SELECT '3A' FROM DUAL UNION
  SELECT 'A12' FROM DUAL UNION
  SELECT 'A20' FROM DUAL)
ORDER BY DECODE(RTRIM(TRANSLATE(codigo, '0123456789',' ')),'',LPAD
(codigo,30,'0'),codigo);

--- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <[EMAIL PROTECTED]> 
escreveu
>
> Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
> numérica, desprezando os caracteres ? Desprezar as linhas que
> contenham não-números ? Transformar a porção da string que contém
> dígitos em número ? E se houver , ou . entre os números, o que fazer
> ?? Qual é a lógica que vc pretende ?
> 
> []s
> 
>  Chiappa
> --- Em oracle_br@yahoogrupos.com.br, "Luiz Ribeiro" 
> escreveu
> >
> > Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
> também, não somente números.
> > 
> >  
> > 
> > Obrigado.
> > 
> >  
> > 
> > 
> > 
> > From: oracle_br@yahoogrupos.com.br
> [mailto:[EMAIL PROTECTED] On Behalf Of jlchiappa
> > Sent: quarta-feira, 28 de novembro de 2007 14:46
> > To: oracle_br@yahoogrupos.com.br
> > Subject: [oracle_br] Re: Order by coluna alfanumérica
> > 
> >  
> > 
> > Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
> > 
> > select nnn from TABELA order by to_char(to_number
(COLUNA), 'FM009');
> > 
> > ==> mas armazenar números em campos string SÓ PODE DAR n+1
> > probleminhas, desde performance até administração, recomendaria vc
> > parar IMEDIATAMENTE com essa prática, se minimamente possível...
> > 
> > []s
> > 
> > Chiappa
> > 
> > --- Em oracle_br@yahoogrupos.com.br
> <mailto:oracle_br%40yahoogrupos.com.br> , "Luiz Ribeiro" 

> > escreveu
> > >
> > > Boa tarde.
> > > 
> > > 
> > > 
> > > Já vi isso na lista, mas não estou conseguindo encontrar. Como 
fazer
> > para que o resultado abaixo, com order by numa coluna varchar2:
> > > 
> > > 
> > > 
> > > SQL> select coluna from tabela order by coluna;
> > > 
> > > 
> > > 
> > > 1
> > > 
> > > --
> > > 
> > > 1
> > > 
> > > 10
> > > 
> > > 2
> > > 
> > > 20
> > > 
> > > 3
> > > 
> > > 30
> > > 
> > > 
> > > 
> > > Tenha como resultado o seguinte:
> > > 
> > > 
> > > 
> > > SQL> select coluna from tabela order by coluna;
> > > 
> > > 
> > > 
> > > 1
> > > 
> > > --
> > > 
> > > 1
> > > 
> > > 2
> > > 
> > > 3
> > > 
> > > 10
> > > 
> > > 20
> > > 
> > > 30
> > > 
> > > 
> > > 
> > > Obrigado,
> > > 
> > > 
> > > 
> > > Luiz
> > > 
> > > 
> > > 
> > > [As partes desta mensagem que não continham texto foram 
removidas]
> > >
> > 
> >  
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>




Re: [oracle_br] Re: Order by coluna alfanuméric a

2007-11-29 Por tôpico Roberto Amorim
Eu? calmo?
Estou tranquilíssimo.
Até porque sou um ganhador da Megasena.

Tá certo que foi no bolão e minha parte será R$24,00, mas não se pode 
ter tudo hehehe

O problema de alinhar a esquerda é que isso não daria certo com os nomes.
considere esse exemplo mais difícil:
   1
   2
   3
 10
 20
 30
   MEL
   MEL
 ABEL
 BETO
 JCLAUDIO
   99937
   99937
 FRANSCISCO

Veja como ABEL fica abaixo de MEL. Isso ocorre em virtude de uma ter 
quatro e a outra 3 posições. Ou seja, a regra que resolve o problema dos 
números é também aplicada aos nomes e bagunça tudo.
Um abraço milionário!
Roberto



Andre Santos escreveu:
> Roberto
>
> Muita calma nessa hora! rsss
> Alguns colegas aqui já mencionaram "alinhar tudo à direita", com a função
> LPAD.
> Provavelmente isso já resolveria o problema do "1" versus "10"... (se há
> caracteres, talvez UPPER também seja necessário).
>
> Segue um exemplo:
> __
>
> SQL> CREATE TABLE teste (codigo VARCHAR(5));
>
> Tabela criada.
>
> SQL> INSERT INTO teste VALUES ('1');
>
> 1 linha criada.
>
> SQL> INSERT INTO teste VALUES ('10');
>
> 1 linha criada.
>
> SQL> INSERT INTO teste VALUES ('X1');
>
> 1 linha criada.
>
> SQL> INSERT INTO teste VALUES ('1X');
>
> 1 linha criada.
>
> SQL> SELECT * FROM teste
>   2  ORDER BY codigo;
>
> CODIG
> -
> X1
> 1
> 1X
> 10
>
> SQL> SELECT * FROM teste
>   2  ORDER BY LPAD(codigo,5);
>
> CODIG
> -
> 1
> X1
> 1X
> 10
>
> SQL> SELECT LPAD(codigo,5)
>   2  FROM teste
>   3  ORDER BY LPAD(codigo,5);
>
> LPAD(
> -
> 1
>X1
>1X
>10
> __
>
> [ ]
>
> André
>
>
>
> Em 28/11/07, Roberto Amorim <[EMAIL PROTECTED]> escreveu:
>   
>>   Só que o campo é cvarchar e tem string. Então retornará invalid number.
>> Não tem jeito mesmo. Só fazendo uma função como eu disse no outro email.
>> Só que aí a consulta fica se arrastando.
>> A função percorreria toda a string e caso só houvesse números ela
>> aplicaria a máscara com o formato, tal como o Chiappa falou. Se
>> contivesse caracteres não numéricos ela retornaria a própria string, sem
>> mudanças . A função seria apenas para a ordenação.
>> Roberto
>>
>> wilsonteixeira2000 escreveu:
>> 
>>> Luiz Ribeiro, boa tarde!
>>>
>>>
>>> Existe um tecnica "POG" para atender este tipo de situação que atende
>>> muitas vezes. Adicionar caracteres a direita do valor ex:
>>>
>>> tabela A:
>>> Codigo varchar2 (2),
>>> nome varchar2(10)
>>>
>>> select * from a order by codigo
>>> codigo nome
>>> 1 teste
>>> 10 teste 10
>>> 2 teste 2
>>>
>>> select * from order by to_char(codigo,'00')
>>> codigo nome
>>> 1 teste
>>> 2 teste 2
>>> 10 teste 10
>>>
>>>
>>> --- Em oracle_br@yahoogrupos.com.br ,
>>>   
>> "jlchiappa" <[EMAIL PROTECTED]>
>> 
>>> escreveu
>>>
>>>   
>>>> Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
>>>> numérica, desprezando os caracteres ? Desprezar as linhas que
>>>> contenham não-números ? Transformar a porção da string que contém
>>>> dígitos em número ? E se houver , ou . entre os números, o que fazer
>>>> ?? Qual é a lógica que vc pretende ?
>>>>
>>>> []s
>>>>
>>>> Chiappa
>>>> --- Em oracle_br@yahoogrupos.com.br ,
>>>> 
>> "Luiz Ribeiro" 
>> 
>>>> escreveu
>>>>
>>>> 
>>>>> Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
>>>>>
>>>>>   
>>>> também, não somente números.
>>>>
>>>> 
>>>>> Obrigado.
>>>>>
>>>>>
>>>>>
>>>>> 
>>>>>
>>>>> From: oracle_br@yahoogrupos.com.br 
>>>>>
>>>>>   
>>>> [mailto:oracle_br@yahoogrupos.com.br ]
>>>> 
>> On Behalf Of jlchiappa
>> 
>>>>> Sent: quarta-feira,

Re: [oracle_br] Re: Order by coluna alfanumérica

2007-11-29 Por tôpico Andre Santos
Roberto

Muita calma nessa hora! rsss
Alguns colegas aqui já mencionaram "alinhar tudo à direita", com a função
LPAD.
Provavelmente isso já resolveria o problema do "1" versus "10"... (se há
caracteres, talvez UPPER também seja necessário).

Segue um exemplo:
__

SQL> CREATE TABLE teste (codigo VARCHAR(5));

Tabela criada.

SQL> INSERT INTO teste VALUES ('1');

1 linha criada.

SQL> INSERT INTO teste VALUES ('10');

1 linha criada.

SQL> INSERT INTO teste VALUES ('X1');

1 linha criada.

SQL> INSERT INTO teste VALUES ('1X');

1 linha criada.

SQL> SELECT * FROM teste
  2  ORDER BY codigo;

CODIG
-
X1
1
1X
10

SQL> SELECT * FROM teste
  2  ORDER BY LPAD(codigo,5);

CODIG
-
1
X1
1X
10

SQL> SELECT LPAD(codigo,5)
  2  FROM teste
  3  ORDER BY LPAD(codigo,5);

LPAD(
-
1
   X1
   1X
   10
__

[ ]

André



Em 28/11/07, Roberto Amorim <[EMAIL PROTECTED]> escreveu:
>
>   Só que o campo é cvarchar e tem string. Então retornará invalid number.
> Não tem jeito mesmo. Só fazendo uma função como eu disse no outro email.
> Só que aí a consulta fica se arrastando.
> A função percorreria toda a string e caso só houvesse números ela
> aplicaria a máscara com o formato, tal como o Chiappa falou. Se
> contivesse caracteres não numéricos ela retornaria a própria string, sem
> mudanças . A função seria apenas para a ordenação.
> Roberto
>
> wilsonteixeira2000 escreveu:
> > Luiz Ribeiro, boa tarde!
> >
> >
> > Existe um tecnica "POG" para atender este tipo de situação que atende
> > muitas vezes. Adicionar caracteres a direita do valor ex:
> >
> > tabela A:
> > Codigo varchar2 (2),
> > nome varchar2(10)
> >
> > select * from a order by codigo
> > codigo nome
> > 1 teste
> > 10 teste 10
> > 2 teste 2
> >
> > select * from order by to_char(codigo,'00')
> > codigo nome
> > 1 teste
> > 2 teste 2
> > 10 teste 10
> >
> >
> > --- Em oracle_br@yahoogrupos.com.br ,
> "jlchiappa" <[EMAIL PROTECTED]>
> > escreveu
> >
> >> Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
> >> numérica, desprezando os caracteres ? Desprezar as linhas que
> >> contenham não-números ? Transformar a porção da string que contém
> >> dígitos em número ? E se houver , ou . entre os números, o que fazer
> >> ?? Qual é a lógica que vc pretende ?
> >>
> >> []s
> >>
> >> Chiappa
> >> --- Em oracle_br@yahoogrupos.com.br ,
> "Luiz Ribeiro" 
> >> escreveu
> >>
> >>> Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
> >>>
> >> também, não somente números.
> >>
> >>>
> >>>
> >>> Obrigado.
> >>>
> >>>
> >>>
> >>> 
> >>>
> >>> From: oracle_br@yahoogrupos.com.br 
> >>>
> >> [mailto:oracle_br@yahoogrupos.com.br ]
> On Behalf Of jlchiappa
> >>
> >>> Sent: quarta-feira, 28 de novembro de 2007 14:46
> >>> To: oracle_br@yahoogrupos.com.br 
> >>> Subject: [oracle_br] Re: Order by coluna alfanumérica
> >>>
> >>>
> >>>
> >>> Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
> >>>
> >>> select nnn from TABELA order by to_char(to_number
> >>>
> > (COLUNA), 'FM009');
> >
> >>> ==> mas armazenar números em campos string SÓ PODE DAR n+1
> >>> probleminhas, desde performance até administração, recomendaria vc
> >>> parar IMEDIATAMENTE com essa prática, se minimamente possível...
> >>>
> >>> []s
> >>>
> >>> Chiappa
> >>>
> >>> --- Em oracle_br@yahoogrupos.com.br 
> >>>
> >> <mailto:oracle_br%40yahoogrupos.com.br> , "Luiz Ribeiro"
> >>
> > 
> >
> >>> escreveu
> >>>
> >>>> Boa tarde.
> >>>>
> >>>>
> >>>>
> >>>> Já vi isso na lista, mas não estou conseguindo encontrar. Como
> >>>>
> > fazer
> >
> >>> para que o resultado abaixo, com order by numa coluna varchar2:
> >>>
> >>>>
> >>>> SQL> select coluna from tabela order by coluna;
> >>>>
> >>>>
> >>&g

Re: [oracle_br] Re: Order by coluna alfanuméric a

2007-11-28 Por tôpico Roberto Amorim
Só que o campo é cvarchar e tem string. Então retornará invalid number.
Não tem jeito mesmo. Só fazendo uma função como eu disse no outro email.
Só que aí a consulta fica se arrastando.
A função percorreria toda a string e caso só houvesse números ela 
aplicaria a máscara com o formato, tal como o Chiappa falou. Se 
contivesse caracteres não numéricos ela retornaria a própria string, sem 
mudanças . A função seria apenas para a ordenação.
Roberto

wilsonteixeira2000 escreveu:
> Luiz Ribeiro, boa tarde!
>
>
> Existe um tecnica "POG" para atender este tipo de situação que atende 
> muitas vezes. Adicionar caracteres a direita do valor ex:
>
> tabela A:
> Codigo varchar2 (2),
> nome varchar2(10)
>
> select * from a order by codigo
> codigo nome
> 1  teste
> 10 teste 10
> 2  teste 2
>
> select * from order by to_char(codigo,'00')
> codigo nome
> 1  teste
> 2  teste 2
> 10 teste 10
>
>
> --- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <[EMAIL PROTECTED]> 
> escreveu
>   
>> Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
>> numérica, desprezando os caracteres ? Desprezar as linhas que
>> contenham não-números ? Transformar a porção da string que contém
>> dígitos em número ? E se houver , ou . entre os números, o que fazer
>> ?? Qual é a lógica que vc pretende ?
>>
>> []s
>>
>>  Chiappa
>> --- Em oracle_br@yahoogrupos.com.br, "Luiz Ribeiro" 
>> escreveu
>> 
>>> Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
>>>   
>> também, não somente números.
>> 
>>>  
>>>
>>> Obrigado.
>>>
>>>  
>>>
>>> 
>>>
>>> From: oracle_br@yahoogrupos.com.br
>>>   
>> [mailto:[EMAIL PROTECTED] On Behalf Of jlchiappa
>> 
>>> Sent: quarta-feira, 28 de novembro de 2007 14:46
>>> To: oracle_br@yahoogrupos.com.br
>>> Subject: [oracle_br] Re: Order by coluna alfanumérica
>>>
>>>  
>>>
>>> Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
>>>
>>> select nnn from TABELA order by to_char(to_number
>>>   
> (COLUNA), 'FM009');
>   
>>> ==> mas armazenar números em campos string SÓ PODE DAR n+1
>>> probleminhas, desde performance até administração, recomendaria vc
>>> parar IMEDIATAMENTE com essa prática, se minimamente possível...
>>>
>>> []s
>>>
>>> Chiappa
>>>
>>> --- Em oracle_br@yahoogrupos.com.br
>>>   
>> <mailto:oracle_br%40yahoogrupos.com.br> , "Luiz Ribeiro" 
>> 
> 
>   
>>> escreveu
>>>   
>>>> Boa tarde.
>>>>
>>>>
>>>>
>>>> Já vi isso na lista, mas não estou conseguindo encontrar. Como 
>>>> 
> fazer
>   
>>> para que o resultado abaixo, com order by numa coluna varchar2:
>>>   
>>>>
>>>> SQL> select coluna from tabela order by coluna;
>>>>
>>>>
>>>>
>>>> 1
>>>>
>>>> --
>>>>
>>>> 1
>>>>
>>>> 10
>>>>
>>>> 2
>>>>
>>>> 20
>>>>
>>>> 3
>>>>
>>>> 30
>>>>
>>>>
>>>>
>>>> Tenha como resultado o seguinte:
>>>>
>>>>
>>>>
>>>> SQL> select coluna from tabela order by coluna;
>>>>
>>>>
>>>>
>>>> 1
>>>>
>>>> --
>>>>
>>>> 1
>>>>
>>>> 2
>>>>
>>>> 3
>>>>
>>>> 10
>>>>
>>>> 20
>>>>
>>>> 30
>>>>
>>>>
>>>>
>>>> Obrigado,
>>>>
>>>>
>>>>
>>>> Luiz
>>>>
>>>>
>>>>
>>>> [As partes desta mensagem que não continham texto foram 
>>>> 
> removidas]
>   
>>>  
>>>
>>>
>>>
>>> [As partes desta mensagem que não continham texto foram removidas]
>>>
>>>   
>
>
>
>
>   
>> Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package » Procedure 
>> » Scripts » Tutoriais acesse: 
>> http://www.oraclebr.com.br/codigo/ListaCodigo.php 
>> 
> --
>   
>> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>> responsabilidade de seus remetentes.
>> 
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
> --
>   
>> O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>> http://www.oraclebr.com.br/  
>> 
> 
>   
> Links do Yahoo! Grupos
>
>  
>
>
>   


[oracle_br] Re: Order by coluna alfanumérica

2007-11-28 Por tôpico wilsonteixeira2000
Luiz Ribeiro, boa tarde!


Existe um tecnica "POG" para atender este tipo de situação que atende 
muitas vezes. Adicionar caracteres a direita do valor ex:

tabela A:
Codigo varchar2 (2),
nome varchar2(10)

select * from a order by codigo
codigo nome
1  teste
10 teste 10
2  teste 2

select * from order by to_char(codigo,'00')
codigo nome
1  teste
2  teste 2
10 teste 10


--- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <[EMAIL PROTECTED]> 
escreveu
>
> Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
> numérica, desprezando os caracteres ? Desprezar as linhas que
> contenham não-números ? Transformar a porção da string que contém
> dígitos em número ? E se houver , ou . entre os números, o que fazer
> ?? Qual é a lógica que vc pretende ?
> 
> []s
> 
>  Chiappa
> --- Em oracle_br@yahoogrupos.com.br, "Luiz Ribeiro" 
> escreveu
> >
> > Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
> também, não somente números.
> > 
> >  
> > 
> > Obrigado.
> > 
> >  
> > 
> > 
> > 
> > From: oracle_br@yahoogrupos.com.br
> [mailto:[EMAIL PROTECTED] On Behalf Of jlchiappa
> > Sent: quarta-feira, 28 de novembro de 2007 14:46
> > To: oracle_br@yahoogrupos.com.br
> > Subject: [oracle_br] Re: Order by coluna alfanumérica
> > 
> >  
> > 
> > Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
> > 
> > select nnn from TABELA order by to_char(to_number
(COLUNA), 'FM009');
> > 
> > ==> mas armazenar números em campos string SÓ PODE DAR n+1
> > probleminhas, desde performance até administração, recomendaria vc
> > parar IMEDIATAMENTE com essa prática, se minimamente possível...
> > 
> > []s
> > 
> > Chiappa
> > 
> > --- Em oracle_br@yahoogrupos.com.br
> <mailto:oracle_br%40yahoogrupos.com.br> , "Luiz Ribeiro" 

> > escreveu
> > >
> > > Boa tarde.
> > > 
> > > 
> > > 
> > > Já vi isso na lista, mas não estou conseguindo encontrar. Como 
fazer
> > para que o resultado abaixo, com order by numa coluna varchar2:
> > > 
> > > 
> > > 
> > > SQL> select coluna from tabela order by coluna;
> > > 
> > > 
> > > 
> > > 1
> > > 
> > > --
> > > 
> > > 1
> > > 
> > > 10
> > > 
> > > 2
> > > 
> > > 20
> > > 
> > > 3
> > > 
> > > 30
> > > 
> > > 
> > > 
> > > Tenha como resultado o seguinte:
> > > 
> > > 
> > > 
> > > SQL> select coluna from tabela order by coluna;
> > > 
> > > 
> > > 
> > > 1
> > > 
> > > --
> > > 
> > > 1
> > > 
> > > 2
> > > 
> > > 3
> > > 
> > > 10
> > > 
> > > 20
> > > 
> > > 30
> > > 
> > > 
> > > 
> > > Obrigado,
> > > 
> > > 
> > > 
> > > Luiz
> > > 
> > > 
> > > 
> > > [As partes desta mensagem que não continham texto foram 
removidas]
> > >
> > 
> >  
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>




[oracle_br] Re: Order by coluna alfanumérica

2007-11-28 Por tôpico jlchiappa
Aí fica difícil, nesses casos o que vc quer - ordenar só pela parte
numérica, desprezando os caracteres ? Desprezar as linhas que
contenham não-números ? Transformar a porção da string que contém
dígitos em número ? E se houver , ou . entre os números, o que fazer
?? Qual é a lógica que vc pretende ?

[]s

 Chiappa
--- Em oracle_br@yahoogrupos.com.br, "Luiz Ribeiro" <[EMAIL PROTECTED]>
escreveu
>
> Valeu pela dica, Chiappa, mas é que esse campo pode conter strings
também, não somente números.
> 
>  
> 
> Obrigado.
> 
>  
> 
> 
> 
> From: oracle_br@yahoogrupos.com.br
[mailto:[EMAIL PROTECTED] On Behalf Of jlchiappa
> Sent: quarta-feira, 28 de novembro de 2007 14:46
> To: oracle_br@yahoogrupos.com.br
> Subject: [oracle_br] Re: Order by coluna alfanumérica
> 
>  
> 
> Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
> 
> select nnn from TABELA order by to_char(to_number(COLUNA), 'FM009');
> 
> ==> mas armazenar números em campos string SÓ PODE DAR n+1
> probleminhas, desde performance até administração, recomendaria vc
> parar IMEDIATAMENTE com essa prática, se minimamente possível...
> 
> []s
> 
> Chiappa
> 
> --- Em oracle_br@yahoogrupos.com.br
<mailto:oracle_br%40yahoogrupos.com.br> , "Luiz Ribeiro" 
> escreveu
> >
> > Boa tarde.
> > 
> > 
> > 
> > Já vi isso na lista, mas não estou conseguindo encontrar. Como fazer
> para que o resultado abaixo, com order by numa coluna varchar2:
> > 
> > 
> > 
> > SQL> select coluna from tabela order by coluna;
> > 
> > 
> > 
> > 1
> > 
> > --
> > 
> > 1
> > 
> > 10
> > 
> > 2
> > 
> > 20
> > 
> > 3
> > 
> > 30
> > 
> > 
> > 
> > Tenha como resultado o seguinte:
> > 
> > 
> > 
> > SQL> select coluna from tabela order by coluna;
> > 
> > 
> > 
> > 1
> > 
> > --
> > 
> > 1
> > 
> > 2
> > 
> > 3
> > 
> > 10
> > 
> > 20
> > 
> > 30
> > 
> > 
> > 
> > Obrigado,
> > 
> > 
> > 
> > Luiz
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
> 
>  
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




Re: [oracle_br] Re: Order by coluna alfanuméric a

2007-11-28 Por tôpico Roberto Amorim
Dá para fazer, mas iria ficar lento pra daná.
Você faria uma função que receberia a string, trataria a string asc por 
asc e retornaria um valor equivalente que fosse usado para a ordenação

Luiz Ribeiro escreveu:
> Valeu pela dica, Chiappa, mas é que esse campo pode conter strings também, 
> não somente números.
>
>  
>
> Obrigado.
>
>  
>
> 
>
> From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of 
> jlchiappa
> Sent: quarta-feira, 28 de novembro de 2007 14:46
> To: oracle_br@yahoogrupos.com.br
> Subject: [oracle_br] Re: Order by coluna alfanumérica
>
>  
>
> Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :
>
> select nnn from TABELA order by to_char(to_number(COLUNA), 'FM009');
>
> ==> mas armazenar números em campos string SÓ PODE DAR n+1
> probleminhas, desde performance até administração, recomendaria vc
> parar IMEDIATAMENTE com essa prática, se minimamente possível...
>
> []s
>
> Chiappa
>
> --- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> , 
> "Luiz Ribeiro" <[EMAIL PROTECTED]>
> escreveu
>   
>> Boa tarde.
>>
>>
>>
>> Já vi isso na lista, mas não estou conseguindo encontrar. Como fazer
>> 
> para que o resultado abaixo, com order by numa coluna varchar2:
>   
>>
>> SQL> select coluna from tabela order by coluna;
>>
>>
>>
>> 1
>>
>> --
>>
>> 1
>>
>> 10
>>
>> 2
>>
>> 20
>>
>> 3
>>
>> 30
>>
>>
>>
>> Tenha como resultado o seguinte:
>>
>>
>>
>> SQL> select coluna from tabela order by coluna;
>>
>>
>>
>> 1
>>
>> --
>>
>> 1
>>
>> 2
>>
>> 3
>>
>> 10
>>
>> 20
>>
>> 30
>>
>>
>>
>> Obrigado,
>>
>>
>>
>> Luiz
>>
>>
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>> 
>
>  
>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
>   
>> Apostilas » Dicas e Exemplos » Funções » Mundo Oracle » Package » Procedure 
>> » Scripts » Tutoriais acesse: 
>> http://www.oraclebr.com.br/codigo/ListaCodigo.php 
>> 
> --
>   
>> Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>> responsabilidade de seus remetentes.
>> 
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
> --
>   
>> O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>> http://www.oraclebr.com.br/  
>> 
> 
>   
> Links do Yahoo! Grupos
>
>  
>
>
>   


RE: [oracle_br] Re: Order by coluna alfanuméri ca

2007-11-28 Por tôpico Rafael Milanez
Se o tamanho maximo da coluna é 3 digitos supondo vc faz assim

 

No seu order by vc coloca  LPAD(nome_coluna,3,'0')

 

From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of 
jlchiappa
Sent: quarta-feira, 28 de novembro de 2007 13:46
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Re: Order by coluna alfanumérica

 

Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :

select nnn from TABELA order by to_char(to_number(COLUNA), 'FM009');

==> mas armazenar números em campos string SÓ PODE DAR n+1
probleminhas, desde performance até administração, recomendaria vc
parar IMEDIATAMENTE com essa prática, se minimamente possível...

[]s

Chiappa

--- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> , 
"Luiz Ribeiro" <[EMAIL PROTECTED]>
escreveu
>
> Boa tarde.
> 
> 
> 
> Já vi isso na lista, mas não estou conseguindo encontrar. Como fazer
para que o resultado abaixo, com order by numa coluna varchar2:
> 
> 
> 
> SQL> select coluna from tabela order by coluna;
> 
> 
> 
> 1
> 
> --
> 
> 1
> 
> 10
> 
> 2
> 
> 20
> 
> 3
> 
> 30
> 
> 
> 
> Tenha como resultado o seguinte:
> 
> 
> 
> SQL> select coluna from tabela order by coluna;
> 
> 
> 
> 1
> 
> --
> 
> 1
> 
> 2
> 
> 3
> 
> 10
> 
> 20
> 
> 30
> 
> 
> 
> Obrigado,
> 
> 
> 
> Luiz
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>

 



[As partes desta mensagem que não continham texto foram removidas]



RE: [oracle_br] Re: Order by coluna alfanuméri ca

2007-11-28 Por tôpico Luiz Ribeiro
Valeu pela dica, Chiappa, mas é que esse campo pode conter strings também, não 
somente números.

 

Obrigado.

 



From: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] On Behalf Of 
jlchiappa
Sent: quarta-feira, 28 de novembro de 2007 14:46
To: oracle_br@yahoogrupos.com.br
Subject: [oracle_br] Re: Order by coluna alfanumérica

 

Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :

select nnn from TABELA order by to_char(to_number(COLUNA), 'FM009');

==> mas armazenar números em campos string SÓ PODE DAR n+1
probleminhas, desde performance até administração, recomendaria vc
parar IMEDIATAMENTE com essa prática, se minimamente possível...

[]s

Chiappa

--- Em oracle_br@yahoogrupos.com.br <mailto:oracle_br%40yahoogrupos.com.br> , 
"Luiz Ribeiro" <[EMAIL PROTECTED]>
escreveu
>
> Boa tarde.
> 
> 
> 
> Já vi isso na lista, mas não estou conseguindo encontrar. Como fazer
para que o resultado abaixo, com order by numa coluna varchar2:
> 
> 
> 
> SQL> select coluna from tabela order by coluna;
> 
> 
> 
> 1
> 
> --
> 
> 1
> 
> 10
> 
> 2
> 
> 20
> 
> 3
> 
> 30
> 
> 
> 
> Tenha como resultado o seguinte:
> 
> 
> 
> SQL> select coluna from tabela order by coluna;
> 
> 
> 
> 1
> 
> --
> 
> 1
> 
> 2
> 
> 3
> 
> 10
> 
> 20
> 
> 30
> 
> 
> 
> Obrigado,
> 
> 
> 
> Luiz
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>

 



[As partes desta mensagem que não continham texto foram removidas]



[oracle_br] Re: Order by coluna alfanumérica

2007-11-28 Por tôpico jlchiappa
Se o tamanho máximo da coluna é 3 (digamos), vc poderia pedir :

select nnn from TABELA order by to_char(to_number(COLUNA), 'FM009');

==> mas armazenar números em campos string SÓ PODE DAR n+1
probleminhas, desde performance até administração, recomendaria vc
parar IMEDIATAMENTE com essa prática, se minimamente possível...

[]s

 Chiappa

--- Em oracle_br@yahoogrupos.com.br, "Luiz Ribeiro" <[EMAIL PROTECTED]>
escreveu
>
> Boa tarde.
> 
>  
> 
> Já vi isso na lista, mas não estou conseguindo encontrar. Como fazer
para que o resultado abaixo, com order by numa coluna varchar2:
> 
>  
> 
> SQL> select coluna from tabela order by coluna;
> 
>  
> 
>  1
> 
> --
> 
>  1
> 
>  10
> 
>  2
> 
>  20
> 
>  3
> 
>  30
> 
>  
> 
> Tenha como resultado o seguinte:
> 
>  
> 
> SQL> select coluna from tabela order by coluna;
> 
>  
> 
>  1
> 
> --
> 
>  1
> 
>  2
> 
>  3
> 
>  10
> 
>  20
> 
>  30
> 
>  
> 
> Obrigado,
> 
>  
> 
> Luiz
> 
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




[oracle_br] Re: Order by

2006-11-24 Por tôpico christiancedrid
O problema está no ");" e a falta do alias 
Retira o ) e coloca o alias e roda de novo.
Vai ficar assim:

SELECT BIDBD220_OFAG.AX_OAAGNR 
  FROM BIDBD220_OFAG BIDBD220_OFAG <=
 WHERE BIDBD220_OFAG.AX_OAAUNR = NUMERO 
 AND BIDBD220_OFAG.AX_OAAGNR > OPERACAO 
 AND ROWNUM = 1 
 ORDER BY BIDBD220_OFAG.AX_OAAGNR; <=


abs
Christian


--- Em oracle_br@yahoogrupos.com.br, "earodrig2003" <[EMAIL PROTECTED]> 
escreveu
>
> Pessoal, nao consigo fazer funcionar. Alguem tem alguma ideia?
> 
> SELECT BIDBD220_OFAG.AX_OAAGNR FROM BIDBD220_OFAG WHERE 
> BIDBD220_OFAG.AX_OAAUNR = NUMERO 
> AND BIDBD220_OFAG.AX_OAAGNR > OPERACAO AND ROWNUM = 1 ORDER BY 
> BIDBD220_OFAG.AX_OAAGNR);
> 
> Grato
> []´s Eduardo
>






[oracle_br] Re: Order by

2006-11-24 Por tôpico Anderson
Eduardo, imagino que você queira ordenar o seu select e, no final,
trazer só a primeira linha, cert? Tipo a opção 'top' de algumas
tools/linguagens...

Se for isso, altere o seu comando conforme abaixo:

select * from (
SELECT BIDBD220_OFAG.AX_OAAGNR FROM BIDBD220_OFAG WHERE
BIDBD220_OFAG.AX_OAAUNR = NUMERO
AND BIDBD220_OFAG.AX_OAAGNR > OPERACAO ORDER BY
BIDBD220_OFAG.AX_OAAGNR
)
where ROWNUM = 1;

Espero que seja isso.

Anderson.



--- Em oracle_br@yahoogrupos.com.br, "earodrig2003" <[EMAIL PROTECTED]>
escreveu
>
> Pessoal, nao consigo fazer funcionar. Alguem tem alguma ideia?
> 
> SELECT BIDBD220_OFAG.AX_OAAGNR FROM BIDBD220_OFAG WHERE 
> BIDBD220_OFAG.AX_OAAUNR = NUMERO 
> AND BIDBD220_OFAG.AX_OAAGNR > OPERACAO AND ROWNUM = 1 ORDER BY 
> BIDBD220_OFAG.AX_OAAGNR);
> 
> Grato
> []´s Eduardo
>





[oracle_br] Re: Order by

2006-11-24 Por tôpico Cassio Frigo
Bom dia Eduardo

Sua SELECT retorna somente uma Linha, em virtude do ROWNUM,
o ORDER BY não tem o q ordenar.

Qual a finalidade de sua Select ? O que era esperado de Retorno ?

Se vc expor esses detalhes talvez fique mais facil te ajudar.

Cassio Frigo




[oracle_br] Re: order by base table (lagassi)

2006-10-05 Por tôpico jlchiappa
Marcos, eu já tinha respondido detalhadamente em outra msg, mas pelo
jeito vc não a recebeu, vamos ve se consigo te ajudar : repetindo o
texto da outra msg, a ordenação do Forms nativa é feita PELO BANCO,
portanto vc pode tranquilamente ordenar pela info não-base table DESDE
QUE seja possível ** AO BANCO ** ecuperar a informação, ok ? Exemplo,
Forms 6i C/S com banco 8i : 

a) pra efeito de demonstração, crio um Forms bem simples, um só bloco
na tabela EMP do usuário SCOTT (o usuário-padrão de demos no 8i), com
os campos EMPNO, ENAME, DEPTO e SAL

b) manualmente crio um campo não-base table chamado NOME_DEPTO, a
informação dele (que será o nome de departamento) É POSSÌVEL de ser
recuperada no banco só com as colunas da tabela base-table EMP, então
poderei ordenar 

c) crio ** NO BANCO ** - não é no Forms !! - a seguinte função :

FUNCTION BUSCA_NOME_DEPTO (P_DEPTO number) RETURN VARCHAR2 IS
   v_nome_depto varchar2(80);
BEGIN
  select dname into v_nome_depto from dept where deptno=P_DEPTO;
  return v_nome_depto;
END;

d) seja depois duma query, seja quando o item base table DEPTNO for
alterado manualmente, quero buscar a descrição, assim crio a nível do
campo DEPTNO uma trigger POST-CHANGE com o seguinte código :

-- trigger POST-CHANGE
:NOME_DEPTO := BUSCA_NOME_DEPTO(:DEPTNO);

e pronto, a info será buscada. Usar a trigger POST-CHANGE (que
funciona em ambos os casos) é ao invés da POST-QUERY (que só funciona
pra queries) é técnica-padrão no Forms, mas não sei por que cargas
dágua quando dava treinamento de Forms quase ** nenhum ** dos meus
alunos a tinha usado antes :/


e) finalmente : como já tinha dito em msg anterior , o que o Forms faz
é montar um SQL com o nome dos campos, e adiconar o que estiver nas
propriedades de WHERE e de ORDER BY - na situação-exemplo até agora, o
SQL que seria  montado e enviado seria :

SELECT ROWID,EMPNO,ENAME,SAL,DEPTNO FROM EMP

até aqui, tamos seguros ??? Muito bem, no seu caso provavelmente
ERRADAMENTE vc tascou na propriedade ORDER BY o texto :

:nomedobloco.nomedocamponãobasetable

assim sendo o SQL enviado pro banco foi :

SELECT ROWID,EMPNO,ENAME,SAL,DEPTNO FROM EMP ORDER BY
:nomedobloco.nomedocamponãobasetable

==> eu PERGUNTO, isso é valido pro banco, o banco SABE o que é esse
tal :nomedobloco.nomedocamponãobasetable pra odrenar por ele ?? Eu
mesmo respondo, È CLARO QUE NÃO, esse
:nomedobloco.nomedocamponãobasetable é algo que reside LÁ no Forms !!!

Pra obter o efeito desejado, na propriedade OPRDER BY vc deve colocar :

BUSCA_NOME_DEPTO(DEPTNO)

vamos ver o SQL que será montado e enviado pro banco com esse cara :

SELECT ROWID,EMPNO,ENAME,SAL,DEPTNO FROM EMP order by
BUSCA_NOME_DEPTO(DEPTNO)

==> eu pergunto, o banco SABE o que é esse BUSCA_NOME_DEPTO ??? SIM
!!! Sabe o que é esse DEPTNO ? SIM, é uma COLUNA da tabela! Portanto
ele PODERÁ ordenar por isso, o Forms IRÁ receber os regs ordenados...

Feita a fofoca, obtido o efeito, capicce ?

[]s

 Chiappa


===
Participe do ENPO - Encontro de Profissionais Oracle 2006 ! 
Informações e inscrições em www.enpo-br.org
José Laurindo Chiappa, Palestrante ENPO-2006
===

--- Em oracle_br@yahoogrupos.com.br, "Marcos Giovani Lagassi"
<[EMAIL PROTECTED]> escreveu
>
> vou
> tentar expor o problema.
> isso sera um exemplo.
> tabela x com os atributos: codigo, valores
> criei um forms base table da tabela x e no post-query fiz um select
> que traz a descrição desse código, pois bem, ai vem o meu problema
> quero um order by pela descrição.
> Amigos, eu sei que por esse exemplo basta eu criar uma view que me
> atenderá, mas esse é apenas um exemplo para exemplificar o meu
> problema. Pois a aplicação que esta rodando para eu altera-la da
> forma que muitos amigos já me enviaram como dica é de grande
> trabalho a minha alteração, gostaria de saber se alguem tem alguma
> função.
> Eu até fiz uma função de banco, mas quando eu informo na minha
> função por exemplo odenar(item-que não é da tabela) da erro.
> 
> Sistema Operacional XP
> Oracle 8i
> forms 6i
>







--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--__
Vem aí: ENPO-BR 2006 - Encontro Nacional de Profissionais Oracle
VISITE: http://www.enpo-br.org/ - Dia 11/11 "Vagas Limitadas"
__
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/or

[oracle_br] Re: order by no base table

2006-10-03 Por tôpico Marcos Giovani Lagassi
ok, amigo e qual seria esse id, seria o nome do item, pois, vou 
tentar expor o problema.
isso sera um exemplo.
tabela x com os atributos: codigo, valores
criei um forms base table da tabela x e no post-query fiz um select 
que traz a descrição desse código, pois bem, ai vem o meu problema 
quero um order by pela descrição.
Amigos, eu sei que por esse exemplo basta eu criar uma view que me 
atenderá, mas esse é apenas um exemplo para exemplificar o meu 
problema. Pois a aplicação que esta rodando para eu altera-la da 
forma que muitos amigos já me enviaram como dica é de grande 
trabalho a minha alteração, gostaria de saber se alguem tem alguma 
função.
Eu até fiz uma função de banco, mas quando eu informo na minha 
função por exemplo odenar(item-que não é da tabela) da erro.

Sistema Operacional XP
Oracle 8i
forms 6i

--- Em oracle_br@yahoogrupos.com.br, "Zilmar - ig" <[EMAIL PROTECTED]> 
escreveu
>
> Colega,
> 
> Você pode criar uma função no banco que, passado o id do registro 
como parâmetro, retorne a descrição desejada.
> Então você coloca essa função no order by do bloco e pronto ... 
> 
> Abs
>   - Original Message - 
>   From: Marcos Giovani Lagassi 
>   To: oracle_br@yahoogrupos.com.br 
>   Sent: Tuesday, October 03, 2006 2:44 PM
>   Subject: [oracle_br] order by no base table
> 
> 
>   Pessoal, tenho um forms (base table) que traz informações de uma 
>   tabela, e o usuário quer que se faça um order by por um item do 
bloco 
>   que não é base table.
>   Alguem tem uma solução para esse problema, já pesquisei em 
vários 
>   lugares mas não encontrei.
>   [ ]s
> 
> 
> 
> 
>
> 
> [As partes desta mensagem que não continham texto foram removidas]
>







--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--__

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 





[oracle_br] Re: order by no base table

2006-10-03 Por tôpico jlchiappa
Colega, seguinte : rotinas de ordenação eficientes e próprias são 
geralmente bem chatas e complexas de se escrever, é muito melhor 
deixar o prpoprio banco fazer a ordenação se possível, ie, se a 
tal "info não-base table" pode ser calculada/encontrada pelo banco 
(afora o fato que o servidor de banco normalmente tem um hardware 
MUUUITO mais poderoso à disposição do que o coitado do pc cliente 
onde o Forms roda, pensando em client/server).
 Muito bem, com isso em mente : o que o Forms faz é montar um SQL que 
será enviado pro banco consultando o nome da base-table, o nome dos 
campos base-table, etc, a propriedade ORDER BY simplesmente indica 
uma string que será APENDADA ao SQL gerado, confere ? Sendo assim, 
uma possibilidade é vc escrever no banco (atenção, ** não no Forms, 
mas NO BANCO, que é onde os SQLs rodam!!) uma função X que retorna o 
valor desejado. Por exemplo, se o tal campo não-base  é , digamos, 
uma descrição que é encontrada numa tabela de lookup, a função de 
banco seria algo tipo :
 
 FUNCTION BUSCA_DESCR(P_CODIGO number) is
   v_descr varchar2(nnn);
 BEGIN
select descriçãoabuscar into v_descr from tabeladelookup where 
codigo=P_CODIGO;
return v_descr;
END;

e daí a propriedade ORDER BY será BUSCA_DESCR
(:nomedobloco.nomedoitemdecódigo);

ok ? Outras possibilidades existem (como tabela GTT populada por 
trigger pre-query ou coisa do tipo, ou ter-se uma VIEW que já traz o 
tal valor não-base table preenchido e fazer o Forms se basear nessa 
view, e algumas variações dos temas acima citados, estuda aí qual se 
encaixa no que vc quer, em caso de dificuldades manda aí pra lista 
uma msg com : VERSÃO do Forms no caso, ambiente - se C/S ou Web -, um 
scriptzinho com versões MÍNIMAS das tabelas envolvidas, diz que 
lógica está nesse campo não-base table, de onde ele vem e é formado, 
que a gente pode tentar te ajudar + ...

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, "Marcos Giovani Lagassi" 
<[EMAIL PROTECTED]> escreveu
>
> Pessoal, tenho um forms (base table) que traz informações de uma 
> tabela, e o usuário quer que se faça um order by por um item do 
bloco 
> que não é base table.
> Alguem tem uma solução para esse problema, já pesquisei em vários 
> lugares mas não encontrei.
> [ ]s
>






--
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--__

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__
Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html