Package Oracle
02/03/2023
0
Ola pessoal.
Tenho esse código abaixo e não consigo realizar a condição para enviar todo 10º dia útil de cada mês, por exemplo: vai ter uma rotina que no 10º dia útil vai enviar um email e dentro desse código abaixo, tenho que por uma outra função que fiz, que é a de email.
Tenho esse código abaixo e não consigo realizar a condição para enviar todo 10º dia útil de cada mês, por exemplo: vai ter uma rotina que no 10º dia útil vai enviar um email e dentro desse código abaixo, tenho que por uma outra função que fiz, que é a de email.
function EnvioDeEmail(pParametros in varchar2) return boolean as RET BOOLEAN; DIAUTIL DATE; begin PCK_PROCESSAMENTO.LOG('Verifica para gerar notificações'); PCK_PROCESSAMENTO.LOG('Orgao: ' || PCK_PROCESSAMENTO.GETORGAO); PCK_PROCESSAMENTO.LOG('Tipo: ' || PCK_PROCESSAMENTO.GETTIPO); SELECT TRUNC(FN_DIA_UTIL_CORRIDO(PCK_PROCESSAMENTO.GETORGAO, CURRENT_DATE, 0)) INTO DIAUTIL FROM DUAL; --PEN;GERACAO:GERARLOTES;DTBASECALC:24/02/2023 IF DIAUTIL = TRUNC(CURRENT_DATE) THEN PCK_PROCESSAMENTO.LOG('Processando. É dia útil: ' || TO_CHAR(DIAUTIL, 'DD/MM/YYYY'));
Thiago Ferreira
Curtir tópico
+ 0
Responder
Posts
02/03/2023
Arthur Heinrich
Será que sua função de dia útil está funcionando corretamente?
A função CURRENT_DATE retorna o horário atual, contendo o dia e a hora. Sua função pode estar interpretando que, como esta data possui horário, é posterior a hoje (às 00:00hs) e retornar o dia seguinte?
Se for isso, você pode corrigir a função ou alterar o select para:
Mas, de qualquer forma, não há indicação nenhuma de que isto representaria o décimo dia útil, mas sim, um dia útil qualquer.
Se quer que seja no décimo dia útil, precisa primeiro calcular a data correspondente a ele, para então comparar.
Outra coisa importante é considerar que CURRENT_DATE pode mudar dependendo do fuso horário do cliente. É possível que duas datas "iguais", sejam representadas como dias distintos, dependendo do fuso horário.
02/03/2023 às 23:00hs GMT -3 é o mesmo que 03/03/2023 às 01:00hs GMT -1
A função CURRENT_DATE retorna o horário atual, contendo o dia e a hora. Sua função pode estar interpretando que, como esta data possui horário, é posterior a hoje (às 00:00hs) e retornar o dia seguinte?
Se for isso, você pode corrigir a função ou alterar o select para:
SELECT TRUNC(FN_DIA_UTIL_CORRIDO(PCK_PROCESSAMENTO.GETORGAO, trunc(CURRENT_DATE), 0)) INTO DIAUTIL FROM DUAL;
Mas, de qualquer forma, não há indicação nenhuma de que isto representaria o décimo dia útil, mas sim, um dia útil qualquer.
Se quer que seja no décimo dia útil, precisa primeiro calcular a data correspondente a ele, para então comparar.
Outra coisa importante é considerar que CURRENT_DATE pode mudar dependendo do fuso horário do cliente. É possível que duas datas "iguais", sejam representadas como dias distintos, dependendo do fuso horário.
02/03/2023 às 23:00hs GMT -3 é o mesmo que 03/03/2023 às 01:00hs GMT -1
Responder
Clique aqui para fazer login e interagir na Comunidade :)