Datas PL/SQL

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
marcos.magri
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Qua, 13 Ago 2008 1:43 pm
Localização: São Paulo
Marcos Magri

Olá Pessoal,

Estou com um problema na construção de uma Procedure e preciso da ajuda de vocês.
Existe uma regra na qual dependendo da condição eu devo preencher uma variavel com a data correspondente à segunda-feira da semana ou completar com a data do dia.

Meu problema está em como faço esse tipo de atribuição... :(

Agradecendo desde já pela ajuda de vocês
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Veja se o código abaixo lhe ajuda:

Selecionar tudo

DECLARE 
  vdata DATE := TRUNC(sysdate);
BEGIN   
  IF TO_CHAR(vdata,'D')='1'  
  THEN
     dbms_output.put_line('Hoje é DOMINGO ');
  ELSIF TO_CHAR(vdata,'D')='2'  
  THEN
     dbms_output.put_line('Hoje é Segunda-Feira ');
  ELSIF TO_CHAR(vdata,'D')='3' 
  THEN
     dbms_output.put_line('Hoje é Terça-Feira ');     
  ELSIF TO_CHAR(vdata,'D')='4'   
  THEN  
     dbms_output.put_line('Hoje é Quarta-Feira ');
  ELSIF TO_CHAR(vdata,'D')='5'   
  THEN  
     dbms_output.put_line('Hoje é Quinta-Feira ');
  ELSIF TO_CHAR(vdata,'D')='6'   
  THEN  
     dbms_output.put_line('Hoje é Sexta-Feira ');
  ELSIF TO_CHAR(vdata,'D')='7'   
  THEN  
     dbms_output.put_line('Hoje é Sábado');               
  END IF;   
END;
Qualquer coisa manda pra gente.
marcos.magri
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Qua, 13 Ago 2008 1:43 pm
Localização: São Paulo
Marcos Magri

Valeu... funcionou perfeitamente!!!
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

É possível obter o primeiro dia da semana também usando a função trunc:

Selecionar tudo

select decode( condicao
             , 'true' , trunc(sysdate, 'D') + 1 -- Segunda-Feira da semana atual
             , trunc(sysdate)                   -- Dia de hoje
             ) data
from
(
  select 'true'  condicao from dual union all
  select 'false' condicao from dual
);
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
--
Juliana Cr. Cruz
Analista Desenvolvedor Oracle

Oi gente...
Conversando com um amigo meu, ele disse assim, não sei se era isso que você precisava....

Selecionar tudo

SELECT TO_DATE('17/08/2008','DD/MM/RRRR') - (TO_CHAR(TO_DATE('17/08/2008','DD/MM/RRRR'),'D') - 2 ) result
FROM DUAL
nesse caso ele traz a data da segunda feira...

até mais!!!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

(COLOCADO O POST ABAIXO NUM NOVO TOPICO QUE FOI EXCLUÍDO).
ENVIADO POR marcos.magri


Vejam como ficou:
Código:

Selecionar tudo

        V_DATA := TO_CHAR(SYSDATE, 'D');
        CASE V_DATA
          WHEN '1' THEN V_DATA := TO_CHAR(SYSDATE-6, 'DDMMYYYY');
          --WHEN '2' THEN V_DATA := TO_CHAR(SYSDATE, 'DDMMYYYY');
          WHEN '3' THEN V_DATA := TO_CHAR(SYSDATE-1, 'DDMMYYYY');
          WHEN '4' THEN V_DATA := TO_CHAR(SYSDATE-2, 'DDMMYYYY');
          WHEN '5' THEN V_DATA := TO_CHAR(SYSDATE-3, 'DDMMYYYY');
          WHEN '6' THEN V_DATA := TO_CHAR(SYSDATE-4, 'DDMMYYYY');
          WHEN '7' THEN V_DATA := TO_CHAR(SYSDATE-5, 'DDMMYYYY');
        END CASE;       
        IF (P_TIPO_RELAT = 'D') THEN
          V_DT_INI_PERIODO := LPAD(0,8,0); -->DEIXA DATA ZERADA
          V_DT_FIM_PERIODO := LPAD(0,8,0); -->DEIXA DATA ZERADA
        ELSE
          NULL;
          V_DT_INI_PERIODO := V_DATA;
          V_DT_FIM_PERIODO := TO_CHAR(SYSDATE,'DDMMYYYY');
        END IF; 
Responder
  • Informação