Hallo Benjamin,
Der Trigger ist leider doch noch fehlerhaft (s. Fehlermeldung unten).
Hier nochmal der neue Trigger, der zwar ohne Feldermeldung angelegt
werden kann, jedoch bei der Ausführung eine Fehlermeldung erzeugt
und definitiv nicht funktioniert (z.B. setzt er nicht fehlerhafter Beträge
auf 20 - wie im Trigger-Body gefordert
Der Quellcode d. Triggers:
/*
* Trigger, der dafür sorgt, daß beim Einfügen von volljährigen SportlerInnen
* in die Tabelle "Sportlerin", der Vereinsbeitrag auf 20 Euro erhöht
* wird (Hinweis: SportlerInnen unter 18 zahlen nur 10 Euro).
*/
CREATE OR REPLACE TRIGGER beitrag
BEFORE INSERT OR UPDATE ON sportlerin
FOR EACH ROW
WHEN (NEW.vereinsbeitrag < 20)
DECLARE
geburt DATE;
BEGIN
SELECT m.geburtsdatum INTO geburt FROM mitglied m
WHERE :new.s_id = m.m_id;
IF (MONTHS_BETWEEN(SYSDATE, geburt)/12>=18)
THEN
IF INSERTING OR UPDATING
THEN
UPDATE sportlerin SET vereinsbeitrag=20 WHERE s_id = :new.s_id;
END IF;
END IF;
END;
/
Die Fehlermeldung dazu
(der Trigger hat übrigens den Namen BEITRAG):
UPDATE sportlerin SET vereinsbeitrag=10 where s_id=15;
*
ERROR at line 1:
ORA-04091: table LDB18.SPORTLERIN is mutating, trigger/function
may not see it
ORA-06512: at "LDB18.BEITRAG", line 9
ORA-04088: error during execution of trigger 'LDB18.BEITRAG'
Viele Grüße!
Penny