42 lines
1.2 KiB
SQL
42 lines
1.2 KiB
SQL
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;
|
|
/
|