Package Oracle

SQL

Oracle

PHP

Oracle PL SQL

02/03/2023

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.


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

Thiago Ferreira

Curtidas 0

Respostas

Arthur Heinrich

Arthur Heinrich

02/03/2023

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:

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
GOSTEI 0
POSTAR