Dias Uteis

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
groliveira
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Seg, 16 Fev 2009 1:46 pm
Localização: DF

Atualmente recebo a data do sistema e adiciono mais a quantidade de dias de outra tabela.
Eis a questão, não sei o comando que diferencia sabados e domingos.
Preciso que adicione a data do sistema para gerar data limite, somando apenas dias de segunda a sexta.
alguém pod eme ajudar ?

Selecionar tudo

(select sysdate + t.nu_pz_hr_tipo_solicitacao/24
      from agp.agptb003_tipo_solicitacao t
      where t.nu_tipo_solicitacao = nuTipoSolicitacao
      ),
Grato,
Guilherme Rodrigues
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

Aqui tem um exemplo de como saber se o dia é sábado ou domingo:
http://glufke.net/oracle/viewtopic.php?t=904

Se ainda tiver dúvidas, manda pra gente !
groliveira
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Seg, 16 Fev 2009 1:46 pm
Localização: DF

Seguinte tenho mais ou menos a ideia já...

Mais não sei como implementar...

Selecionar tudo

 (select sysdate + t.nu_pz_hr_tipo_solicitacao/24
      from agp.agptb003_tipo_solicitacao t
      where t.nu_tipo_solicitacao = nuTipoSolicitacao
     ),
No caso ficaria assim

Selecionar tudo

Prazo := (O select acima)
Dia := Sysdate

For i = 1 to <= Prazo
Dia := Dia + 1 
If Dia day = 'Saturday'
         Dia := Dia + 2         -- No caso Somando Sabado e Domingo
EndIf
i := i + 1
EndFor
Grato
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
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

RESPOSTA colocada por groliveira em outro tópico:
-----------------------------------------------------------


Atualmente o Select está assim:

Selecionar tudo

create or replace procedure AGPSP007_INCLUI_SOLICITACAO(coProtocoloAtendimento IN FLOAT,
--F998120  09/12/2008 16:09:47
--F978268  27/11/2008 20:04:42
--F978268  27/11/2008 19:58:13

                                      nuSolicitacao IN FLOAT,
                                      nuTipoSolicitacao IN INTEGER,
                                      nuDestino IN INTEGER,
                                      nuItemDestino IN INTEGER,
                                      nuSubItemDestino IN INTEGER,
                                      deSolicitacao IN STRING,
                                      nuSituacaoSolicitacao IN FLOAT,
                                      coMatriculaCriacao IN STRING) as
begin

  insert into agp.agptb002_solicitacao
    (co_protocolo_atendimento,
     nu_solicitacao,
     nu_tipo_solicitacao,
     nu_destino,
     nu_item_destino,
     nu_sub_item_destino,
     de_solicitacao,
     nu_situacao_solicitacao,
     dt_limite_solicitacao,
     dt_solicitacao,
     co_matricula_criacao,
     co_matricula_alteracao)
  values
    (coProtocoloAtendimento,
     agp.AGPSQ002_SOLICITACAO.NEXTVAL,
     nuTipoSolicitacao,
     nuDestino,
     nuItemDestino,
     nuSubItemDestino,
     deSolicitacao,
     nuSituacaoSolicitacao,
     
     (select sysdate + t.nu_pz_hr_tipo_solicitacao/24
      from agp.agptb003_tipo_solicitacao t
      where t.nu_tipo_solicitacao = nuTipoSolicitacao
       

      ),

     
      sysdate,
     coMatriculaCriacao,
     coMatriculaCriacao);

end;


A minha idéia seria mais ou menos assim

Selecionar tudo

(select sysdate + t.nu_pz_hr_tipo_solicitacao/24
from agp.agptb003_tipo_solicitacao t
where t.nu_tipo_solicitacao = nuTipoSolicitacao
),
No caso ficaria assim:

Selecionar tudo

Prazo := (O select acima)
Dia := Sysdate

For i = 1 to <= Prazo
Dia := Dia + 1
If Dia day = 'Saturday'
Dia := Dia + 2 -- No caso Somando Sabado e Domingo
EndIf
i := i + 1
EndFor

Preciso Somar os dias acrescentando dois dias a mais na contagem caso durante a contagem passe por um sabado...

Preciso de ajuda do pessoal fera ai...
groliveira
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Seg, 16 Fev 2009 1:46 pm
Localização: DF

Pessoal enfim, que puder ajudar eu agradeço...

Meu problema está assim...

Eu pego o sysdate.
Tenho o prazo em horas já cadastrados, tenho que considerar por dias.

Quando pego esse prazo, tenho que somar ao Sysdate para retornar uma data limite.

O problema é que tenho que retornar essa data limite considerando apenas dias uteis...
Caso durante o prazo de dias passe por um sabado, tenho que somar mais 2 dias no prazo pelo fato de somar apenas dias uteis

Criei um procedure que faz essa soma, e gostaria de saber opinioes de você pois nessa procedure esta dando erro...

Selecionar tudo

create or replace procedure AGPSP042_DIAS_UTEIS(
                            nuTipoSolicitacao IN INTEGER) 
as

Begin

Declare

Prazo Integer;
Dia date;
i integer;

Begin

Dia := Sysdate;

execute immediate 'Select 
      t.nu_pz_hr_tipo_solicitacao/24
      from agp.agptb003_tipo_solicitacao t
      where t.nu_tipo_solicitacao = nuTipoSolicitacao'
      INTO Prazo; 

    FOR x in 1..Prazo
    LOOP
    Dia := Dia + 1;
        if to_char(Dia, 'Day') = 'Saturday'
          then
          Dia := Dia + 2; -- No caso Somando Sabado e Domingo
         End If;
    i := i + 1;
    END LOOP;
END;

END;
Pessoal DBAMAN ai de uma forca ai
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

A grande dficuldade com esse tipo de requisito é a necessidade de tratar os feriados como dia não-útil. Suas regras podem ainda pedir que considere-se ou não feriados municipais, o que complica ainda mais.
Para esse tipo de requisito você provavelmente teria que criar uma tabela de cadastro dos feriados e funções de suporte, retornando o próximo e o dia útil anterior.
Responder
  • Informação