Kategorien
CodeArchiv Oracle

Oracle Berechne Ostern

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;

Download