Procedure - Data Hora Útil Futuro - Adicionar minutos
SQL:
CREATE OR ALTER PROCEDURE ADD_HORA_UTIL (ADDMINUTOS integer, UTIL_INI time, UTIL_FIM time)
RETURNS (datahora timestamp)
as
declare variable minutos integer;
declare variable atualtime time;
BEGIN
datahora=current_timestamp;
minutos = 0;
while (minutos<=addminutos) do
begin
if ((extract(weekday from datahora) not in (0,6)) and (extract(hour from datahora)<>12)) then
begin
datahora = datahora + 0.000695; /* aprox. 1 min */
atualtime= extract(hour from datahora)||':'||extract(minute from datahora)||':'||extract(second from datahora);
if ((atualtime <= :util_fim) and (atualtime >= :util_ini)) then
begin
minutos = minutos + 1;
end
end
else
begin
datahora = datahora + 0.000695; /* aprox. 1 min */
end
end
suspend;
END
A procedure esta sendo compartilhada e possui o funcionamento de adicionar minutos a data hora ATUAL, neste caso, sempre sobre o current_timestamp, a mesma desconsidera sábados e domingos além de não considerar os minutos das 12:00 as 12:59;
Essas definições básicas podem ser facilmente personalizadas antes da criação da procedure.
Parâmetros da procedure:
Entrada:
- ADDMINUTOS(integer) = Número inteiro de minutos a serem adicionados.
- UTIL_INI (TIME) = Hora útil inicial - Exemplo: '08:00:00'
- UTIL_FIM (TIME) = Hora útil final - Exemplo: '18:00:00'
Saída
- DATAHORA = Data atual incrementada do numero de minutos uteis solicitados.
Chamada da procedure:
SELECT *
FROM ADD_HORA_UTIL(180, '08:00:00', '18:00:00') -- Adiciona 3 hs a data hora atual.
Retorno:
26/12/2019 15:23:57