CREATE OR REPLACE FUNCTION "FUN_CALCOLA_DATA" ( nome_file IN VARCHAR2 , orario_chiusura IN VARCHAR2 , data_default IN DATE ) RETURN DATE AS data_finale DATE; chiusura_finestra DATE; BEGIN data_finale := to_timestamp(substr(nome_file,5,14),'YYYYMMDDHH24MISS'); -- verifico se data finale sia un giorno lavorativo IF data_finale = FUN_DATE_FESTIVE(data_finale) THEN -- imposto l'ora di chiusura di un giorno lavorativo chiusura_finestra := to_timestamp( substr(nome_file,5,8) || orario_chiusura, 'YYYYMMDDHH24MISS'); ELSE -- nei festivi la finestra ? SEMPRE chiusa chiusura_finestra := to_timestamp( substr(nome_file,5,8) || '000000', 'YYYYMMDDHH24MISS'); END IF ; --DBMS_OUTPUT.put_line('Chiusura = '|| chiusura_finestra); -- ora verifico se la data finale supera la chiusura IF data_finale > chiusura_finestra THEN -- la supera, quindi devo aggiungere un giorno lavorativo data_finale := FUN_DATE_FESTIVE_SUCC(data_finale+1); END IF; RETURN data_finale; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('Errore in FUN_CALCOLA_DATA ' || SQLERRM); RETURN data_default; END FUN_CALCOLA_DATA; /