Beschreibung
Feiertagsberechnung gibt es unter Oracle leider nicht! Dafür habe ich diese Funktion erstellt, die den Ostersonntag berechnet. Alle anderen beweglichen Feiertage sind abhängig vom Ostersonntag und können daraus abgeleitet werden.
Code
CREATE OR REPLACE FUNCTION eastern(yeartocalc NUMBER DEFAULT to_number(to_char(SYSDATE,'YYYY'))) RETURN DATE IS RESULT DATE; a INTEGER; b INTEGER; c INTEGER; d INTEGER; e INTEGER; f INTEGER; g INTEGER; BEGIN a := MOD(yeartocalc, 19); b := yeartocalc / 100; c := (8 * b + 13) / 25 - 2; d := b - (yeartocalc / 400) - 2; e := MOD(19 * MOD(yeartocalc, 19) + MOD(15 - c + d, 30), 30); IF e = 28 THEN IF a > 10 THEN e := 27; END IF; ELSE IF e = 29 THEN e := 28; END IF; END IF; f := MOD(d + 6 * e + 2 * MOD(yeartocalc, 4) + 4 * MOD(yeartocalc, 7) + 6,7); g := e + f + 22; IF g > 31 THEN RESULT := to_date(g - 31 || '.4.' || yeartocalc, 'DD.MM.YYYY'); ELSE RESULT := to_date(g || '.3.' || yeartocalc, 'DD.MM.YYYY'); END IF; RETURN(RESULT); END eastern;