Kategorien
CodeArchiv Oracle

Oracle Feiertag berechnen

Beschreibung

Deutsche Feiertage berechnen ist etwas was man in Oracle so nicht findet. Um aber dennoch Feiertage zu ermitteln, habe ich diese Funktion geschrieben. In der Berechnung der Feiertage sind alle Gesetzlichen Deutschen Feiertage enthalten.
Diese Funktion benötigt die Funktion Ostersonntag!

Parameter

Parameter Name Parameter Wert
holidaynumberNummer des zu ermittelnden Feiertages. Mögliche Nummern siehe Liste der Feiertage
yeartocalcDas Jahr für das Feiertag ermittelt werden soll

Rückgabe

Rückgabe Typ Rückgabe Wert
DateDatum des Feiertages

Liste der Feiertage

  • Neujahr = 1
  • Erscheinungsfest = 2
  • Karfreitag = 3
  • Ostersonntag = 4
  • Ostermontag = 5
  • Maifeiertag = 6
  • Christi Himmelfahrt = 7
  • Pfingstmontag = 8
  • Fronleichnam = 9
  • Mariae Himmelfahrt = 10
  • Tag der Einheit = 11
  • Reformationstag = 12
  • Allerheiligen = 13
  • Buss und Bettag = 14
  • 1. Weihnachtsfeiertag = 15
  • 2. Weihnachtsfeiertag = 16

Code

CREATE OR REPLACE FUNCTION holiday(holidaynumber NUMBER, yeartocalc NUMBER DEFAULT to_number(to_char(SYSDATE,'YYYY')))
    RETURN DATE
IS
    RESULT DATE;
BEGIN
    IF holidaynumber = 1 THEN
        --Neujahr
        RESULT := to_date('01.01.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 2 THEN
        --Erscheinungsfest
        RESULT := to_date('06.01.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 3 THEN
        --Karfreitag
        RESULT := eastern(yeartocalc) - 2;
    ELSIF holidaynumber = 4 THEN
        --Ostersonntag
        RESULT := eastern(yeartocalc);
    ELSIF holidaynumber = 5 THEN
        --Ostermontag
        RESULT := eastern(yeartocalc) + 1;
    ELSIF holidaynumber = 6 THEN
        --Maifeiertag
        RESULT := to_date('01.05.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 7 THEN
        --ChristiHimmelfahrt
        RESULT := eastern(yeartocalc) + 39;
    ELSIF holidaynumber = 8 THEN
        --Pfingstmontag
        RESULT := eastern(yeartocalc) + 50;
    ELSIF holidaynumber = 9 THEN
        --Fronleichnam
        RESULT := eastern(yeartocalc) + 60;
    ELSIF holidaynumber = 10 THEN
        --MariaeHimmelfahrt
        RESULT := to_date('15.08.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 11 THEN
        --TagDerEinheit
        RESULT := to_date('03.10.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 12 THEN
        --Reformationstag
        RESULT := to_date('31.10.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 13 THEN
        --Allerheiligen
        RESULT := to_date('01.11.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 14 THEN
        --BussUndBettag
        RESULT := to_date('25.12.'
        || yeartocalc, 'DD.MM.YYYY')       - to_char(to_date('25.12.'
        || yeartocalc, 'DD.MM.YYYY'), 'D') - 4 * 7 * 4;
    ELSIF holidaynumber = 15 THEN
        --Weihnachtsfeiertag1
        RESULT := to_date('25.12.'
        || yeartocalc, 'DD.MM.YYYY');
    ELSIF holidaynumber = 16 THEN
        --Weihnachtsfeiertag2
        RESULT := to_date('26.12.'
        || yeartocalc, 'DD.MM.YYYY');
    END IF;
    RETURN(RESULT);
END holiday;

Download