39 lines
1.1 KiB
Plaintext
39 lines
1.1 KiB
Plaintext
CREATE OR REPLACE FUNCTION FUN_DATE_FESTIVE (data_in IN DATE)
|
|
RETURN DATE
|
|
-- Se data_in è lavorativo restituisce data_in
|
|
-- Se data_in è festivo restituisce il primo giorno lavorativo precedente
|
|
IS
|
|
appo_settimana VARCHAR2 (20) := NULL;
|
|
appo_data DATE := NULL;
|
|
appo_id_prog mnp.mnp_date_festive.id_prog%TYPE;
|
|
BEGIN
|
|
appo_data := data_in;
|
|
appo_settimana := UPPER (TO_CHAR (appo_data, 'day'));
|
|
|
|
IF RTRIM (appo_settimana) = 'SATURDAY'
|
|
OR RTRIM (appo_settimana) = 'SABATO'
|
|
OR RTRIM (appo_settimana) = 'SUNDAY'
|
|
OR RTRIM (appo_settimana) = 'DOMENICA'
|
|
THEN
|
|
appo_data := dwh.fun_date_festive (appo_data - 1);
|
|
END IF;
|
|
|
|
BEGIN
|
|
SELECT id_prog
|
|
INTO appo_id_prog
|
|
FROM mnp.mnp_date_festive
|
|
WHERE TRUNC (data_festiva) = TRUNC (appo_data)
|
|
AND rownum <2;
|
|
|
|
appo_data := dwh.fun_date_festive (appo_data - 1);
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
RETURN appo_data;
|
|
END;
|
|
|
|
RETURN appo_data;
|
|
END fun_date_festive;
|
|
/
|
|
|