CREATE OR REPLACE FUNCTION FUN_ORE_LAVORATIVE (data_finale IN DATE, data_iniziale IN DATE) RETURN NUMBER -- Restituisce il numero di ore lavorative tra data_iniziale e data_finale IS appo_ore NUMBER; appo_giorni NUMBER; appo_ore_iniziali NUMBER; appo_ore_finali NUMBER; appo_min_finali NUMBER; appo_min_iniziali NUMBER; BEGIN appo_ore := 0; IF data_finale > data_iniziale THEN appo_giorni := dwh.fun_giorni_lavorativi (data_finale, data_iniziale); IF appo_giorni > 0 THEN appo_ore := appo_giorni * 24; END IF; appo_ore_iniziali := TO_NUMBER (TO_CHAR (data_iniziale, 'HH24')); appo_ore_finali := TO_NUMBER (TO_CHAR (data_finale, 'HH24')); appo_ore := appo_ore + appo_ore_finali - appo_ore_iniziali; appo_min_iniziali := TO_NUMBER (TO_CHAR (data_iniziale, 'mi')); appo_min_finali := TO_NUMBER (TO_CHAR (data_finale, 'mi')); IF (appo_min_finali - appo_min_iniziali) < 0 THEN appo_ore := appo_ore - 1; END IF; ELSE appo_ore := 0; END IF; RETURN appo_ore; END fun_ore_lavorative; /