Ajuda no select =/

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

pessoal... tenho o seguinte select:

Selecionar tudo

select dia
     , mês
     , ano
     , data
     , dia_semana
     , dia_semana_extenso
     , dia_util
  from (
        select dia
             , mês
             , ano
             , data
             , dia_semana
             , dia_semana_extenso
             , case
                  when fe.dt = x.data then 'F'
                  when dia_semana in (1, 7) then 'N'
                  else 'S'
                end dia_util
          from(
               select dia
                    , mês
                    , ano
                    , data
                    , to_number(to_char(data, 'd')) dia_semana
                    , decode(to_char(data, 'd'), 1, 'DOMINGO'
                                               , 2, 'SEGUNDA-FEIRA'
                                               , 3, 'TERÇA-FEIRA'
                                               , 4, 'QUARTA-FEIRA'
                                               , 5, 'QUINTA-FEIRA'
                                               , 6, 'SEXTA-FEIRA'
                                               , 7, 'SÁBADO')  dia_semana_extenso
                 from (
                       select dia
                            , mês
                            , to_number(to_char(last_day(to_date(mês, 'mm')), 'dd')) ult_dia
                            , to_number(ano) ano
                            , to_date(dia||'-'||mês||'-'||ano, 'dd-mm-yyyy') data
                       from (
                             select level dia
                                  , row_number() over (partition by level order by 1) mês
                                  , to_char(to_date('2008', 'yyyy'), 'yyyy') ano --- aqui
                             from (
                                   select level lv
                                     from dual
                                  connect by level <= 12
                                   )
                             connect by level <= 31 and lv = 12
                             order by level
                             )
                        where dia <= to_number(to_char(last_day(to_date(mês, 'mm')), 'dd'))
                       )
                order by mês
               )x
               , feriad fe
           where x.data = fe.dt(+)
        )
/
mais não consegui descubrir, porque que quando na linha marcada, quando eu coloco um ano, qui seja diferente dos anos bissestos, ocorre um erro =/

será qui alguém pode me ajudar ??
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

ps: Linha marcada é onde tem um "--- aqui" no meio do select =D
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste

OI Gokden!

Então... eu num sei dizer pra ti o porque... mas eu tirei o "order by mês" da sua query e funcionou!

:?

Agora.. porque funcionou... vamos ver...rsss


Até

Juliana Cr. Cruz
jucruzjc
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 57
Registrado em: Qui, 11 Jan 2007 10:26 am
Localização: Santa Bárbaba d'Oeste

Olha eu dinovu!!!....

Dei uma ajeitada no select... onde eu alterei está "-- ALTERADO"...

Veja se funciona!!! Qualquer coisa estamos aí! :wink:

Selecionar tudo


SELECT dia 
     , mês 
     , ano 
     , data 
     , dia_semana 
     , dia_semana_extenso 
     , dia_util 
  from ( 
        select dia 
             , mês 
             , ano 
             , data 
             , dia_semana 
             , dia_semana_extenso 
             , case 
                  when fe.dt = x.data then 'F' 
                  when dia_semana in (1, 7) then 'N' 
                  else 'S' 
                end dia_util 
          from( 
               select dia 
                    , mês 
                    , ano 
                    , data 
                    , to_number(to_char(data, 'd')) dia_semana 
                    , decode(to_char(data, 'd'), 1, 'DOMINGO' 
                                               , 2, 'SEGUNDA-FEIRA' 
                                               , 3, 'TERÇA-FEIRA' 
                                               , 4, 'QUARTA-FEIRA' 
                                               , 5, 'QUINTA-FEIRA' 
                                               , 6, 'SEXTA-FEIRA' 
                                               , 7, 'SÁBADO')  dia_semana_extenso 
                 from ( 
                       select dia 
                            , mês 
                            , to_number(to_char(last_day(to_date(mês, 'mm')), 'dd')) ult_dia 
                            , ano --to_number(ano) ano -- ALTERADO
                            , to_date(dia||'-'||mês||'-'||ano, 'dd-mm-rrrr') data 
                       from ( 
                             select level dia 
                                  , row_number() over (partition by level order by 1) mês 
                                  , to_number(to_char(to_date('2007', 'rrrr'), 'rrrr')) ano 
                             from ( 
                                   select level lv 
                                     from dual 
                                  connect by level <= 12 
                                   ) 
                             connect by level <= 31 and lv = 12 
                             order by level 
                             ) 
                        where dia <= to_number(to_char(last_day(to_date(lpad(to_char(mês||ano),6,'0'),'mmrrrr')),'dd')) -- ALTERADO
                       
                       ) 
                order by mês
               )x 
               , feriad fe 
           WHERE x.data = fe.dt(+) 

        ) 


Até mais!!! :wink:


--
Juliana Cr. Cruz
Oracle Developer
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

obaaaaa.....
vlwww aí =D
eu tinha tentado fazer mais ou menos isso.. mais não tava dando certo...

mais agora num sei onde... mais parece qui tava fazendo errado mesmo =D


vlwww.....
:-o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Bing [Bot], Google Adsense [Bot] e 3 visitantes