Muito obrigado a todos pela ajuda.
Att
Paulo

 
To: oracle_br@yahoogrupos.com.br
From: oracle_br@yahoogrupos.com.br
Date: Thu, 16 Oct 2014 12:47:57 -0300
Subject: Re: [oracle_br] Re: Dulvidas sql














 

 



  


    
      
      
      Chiappa

Ótima explicação sobre NLS_TERRITORY versus dia da semana.
Valeu!

[ ]

André


Em 16 de outubro de 2014 11:32, jlchia...@yahoo.com.br [oracle_br] 
<oracle_br@yahoogrupos.com.br> escreveu:













 

 



  


    
      
      
      Opa, blz ? Então, é totalmente possível sim, e tem trocentas maneiras de 
fazer : pode fazer com artimética de datas (ie, ver se o valor da coluna DATE 
vc já passou exatamente um múltiplo de 7 dias de um dia no passado que foi 5ª 
feira), pode usar uma expressão com uma das n+1! funções que calculam número do 
dia da semana e/ou extraem o nome do dia da semana, á sua vontade...
 Eu acho mais simples usar uma expressão com uma das funções (e ** Certamente 
** vc vai receber outras sugestões nesse sentido, isso é mais ou menos o método 
preferido), apenas aviso que :
 
 a) para programar defensivamente, sempre que vc trabalha com datas vc ** TEM 
** que se precaver da possibilidade do database aonde o seu código vai rodar 
estar com configurações de data/calendário/linguagem/território (o chamado NLS) 
não-padrão... Por exemplo :
 
SQL> alter session set nls_territory = 'AMERICA';
SQL> select level as dow,
    to_char(trunc(sysdate ,'D') + level, 'Day') as day
from dual
connect by level <= 7;

DOW DAY                                
--- ------------------------------------
  1 Monday                               
  2 Tuesday                              
  3 Wednesday                            
  4 Thursday                             
  5 Friday                               
  6 Saturday                             
  7 Sunday 

PORÉM :

SQL> alter session set nls_territory = 'UNITED KINGDOM';

SQL> select level as dow,
    to_char(trunc(sysdate ,'D') + level, 'Day') as day
from dual
connect by level <= 7;

DOW DAY                                
--- ------------------------------------
  1 Tuesday                              
  2 Wednesday                            
  3 Thursday                             
  4 Friday                               
  5 Saturday                             
  6 Sunday                               
  7 Monday    
  
 Vê ?? Databases configurados diferentemente podem dar NOMES diferentes para os 
dias da semana, podem numerar os dias da semana diferentemente .... Aí então se 
vc tivesse escrito um :
 
 WHERE TRUNC(colunadata, 'D') = 'numerodaquinta-feira'

 SEM especificar NLS o teu código poderia falhar...  EXATAMENTE por isso que 
praticamente TODAS as funções que trabalham com datas possuem um parâmetro 
NLS_LANGUAGE, NLS_TERRITORY ou equivalentes Justamente para vc indicar os 
formatos que está assumindo no seu código, yep yep ?? 
 
  b) SE vc vai recuperar grande parte dos dados da tabela ok, não se preocupe, 
MAS se vai recuperar relativamente poucas linhas comparando com o total, pode 
ser que seja útil um índice na coluna : nesse caso, fique CIENTE que qualquer 
função aplicada na coluna indexada DESABILITA o uso do índice 'normal', então 
talvez vc tenha que criar um índice de função 
  
  
  ==> para ambas as obs, Veja lá na documentação Oracle para mais dets e refs...
  
  []s
   
    Chiappa


    
     

    
    






  











    
     

    
    






                                          
  • ... JOSE PAULO jjpaulo....@hotmail.com [oracle_br]
    • ... Fabiano Picolotto fabiano...@gmail.com [oracle_br]
    • ... Marlon Pasquali - TI - Peccin S.A. marlon.pasqu...@peccin.com.br [oracle_br]
    • ... jlchia...@yahoo.com.br [oracle_br]
      • ... Andre Santos andre.psantos...@gmail.com [oracle_br]
        • ... JOSE PAULO jjpaulo....@hotmail.com [oracle_br]

Responder a