Hier muss der Fehler liegen.
Tag = extract(day from new.geburtsdatum);
Monat = extract(Month from new.geburtsdatum);
Jahr = extract(year from new.geburtsdatum);
aber was ist falsch?
Das halte ich für unwahrscheinlich, falls geburtsdatum ein Datumstyp ist. Falls es ein varchar ist, kann es Interpretationsfehler durch die
DB geben. Allerdings lässt nicht jede
DB dann noch dieses extract zu. Wie es in Firebird ist, weiß ich nicht.
Außerdem machst du noch ein extract auf das Jahr, was in deinem Code für den Trigger nicht enthalten ist. Ist der Code, den du uns zeigst vielleicht unvollständig und wie sehen daher gar nicht alle potentiellen Fehlerstellen?
Bitte folgendes genau prüfen:
Code:
if (((new.ZAHLUNGSART is null) or (new.ZAHLUNGSART = '')) or ((new.ZAHLUNGSZEITPUNKT) is null or (new.ZAHLUNGSZEITPUNKT = ''))) then
exception EXCP_INVALID;
Läuft der Trigger vielleicht in die
Exception?
Abgesehen davon ist beim Zahlungszeitpunkt nicht richtig geklammert.
Um es zu vereinfachen, kannst du die Prüfung wie folgt ändern:
Code:
(new.ZAHLUNGSART is null) or (new.ZAHLUNGSART = '')
-- wird zu:
coalesce(new.ZAHLUNGSART, '') = ''
-- und
(new.ZAHLUNGSZEITPUNKT) is null or (new.ZAHLUNGSZEITPUNKT = '')
-- wird zu:
coalesce(new.ZAHLUNGSZEITPUNKT, '') = ''
Das sollte dann so aussehen:
Code:
if ((coalesce(new.ZAHLUNGSART, '') = '') or (coalesce(new.ZAHLUNGSZEITPUNKT, '') = '')) then
exception EXCP_INVALID;
Und bei der Gelegenheit noch Aprol in April ändern