41 lines
1.1 KiB
Plaintext
41 lines
1.1 KiB
Plaintext
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;
|
|
/
|
|
|