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; /