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