Período

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
flebrao
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 116
Registrado em: Seg, 10 Abr 2006 4:46 pm
Localização: Santa Bárbara D'Oeste
Sua vida É o que você É!!!!

Bom dia Mestres...
Pessoal estou tendo que desenvolver um lista de valores contendo périodos.... exemplo abaixo.

...
16 jan 2008 a 15 fev 2008
16 fev 2008 a 15 março 2008
16 março 2008 a 15 abril 2008
e assim por diante...

Pensei em gravar esses períodos em uma tabela... mas será que existe outra forma mais viável para fazer isso?


Abração a todos
cron_rj
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 19 Dez 2007 9:10 am
Localização: Rio de Janeiro RJ

Pensei rápido , mas tive a seguinte idéia, melhore-a :

Selecionar tudo

 DECLARE
 
  v_peri    NUMBER;
  v_control NUMBER;
  
 BEGIN
  
  v_peri := 0;
  v_contro := 1;
  
  FOR v_control..(Numero de meses a frente que você quer)
  LOOP
     
     SELECT '16'
            ||TO_CHAR(TRUNC(SYSDATE + v_peri,'MM'),'/mm/yyyy')
            ||' a '
            || '15'
            ||TO_CHAR(TRUNC(SYSDATE + v_peri,'MM'),'/mm/yyyy')
       FROM DUAL
     
     v_peri := v_peri + 30;
     
   END LOOP;
   
  END;
cron_rj
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 19 Dez 2007 9:10 am
Localização: Rio de Janeiro RJ

Detalhe, o código ta meio errado , mas da pra se ter uma idéia, no segundo período do select , você deve estar 1 mês a frente do primeiro.
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Selecionar tudo

select to_char(dt_ini, 'dd mon yyyy', 'NLS_DATE_LANGUAGE=''PORTUGUESE''')
     ||' a '
     ||to_char(dt_ini, 'dd mon yyyy', 'NLS_DATE_LANGUAGE=''PORTUGUESE''') periodo
from ( select add_months(a.dt_referencia, rnum    )          dt_ini
            , add_months(a.dt_referencia, rnum + 1) - .00001 dt_fim
       from  ( select to_date(20080116, 'yyyymmdd') dt_referencia
               from dual
             ) a -- Data inicial, deverá ser passada como parâmetro.
           , ( select level rnum
               from dual connect by level <= 15 -- Número de períodos.
             ) b
)
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

ops.. ignore a resposta acima.. troquei um campo do resultado
segue a correção:

Selecionar tudo

select to_char(dt_ini, 'dd mon yyyy', 'NLS_DATE_LANGUAGE=''PORTUGUESE''')
     ||' a '
     ||to_char(dt_fim, 'dd mon yyyy', 'NLS_DATE_LANGUAGE=''PORTUGUESE''') periodo
from ( select add_months(a.dt_referencia, rnum    )          dt_ini
            , add_months(a.dt_referencia, rnum + 1) - .00001 dt_fim
       from  ( select to_date(20080116, 'yyyymmdd') dt_referencia
               from dual
             ) a -- Data inicial, deverá ser passada como parâmetro.
           , ( select level rnum
               from dual connect by level <= 15 -- Número de períodos.
             ) b
)
flebrao
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 116
Registrado em: Seg, 10 Abr 2006 4:46 pm
Localização: Santa Bárbara D'Oeste
Sua vida É o que você É!!!!

Obrigado Rafael.... perfeito.... valeus...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes