Errors bei Trigger
-
Hallo!
Ich habe eine Tabelle, in der unter anderem Spalten "Beginn" vom Typ date und "Dauer" vom Typ integer vorkommen.
Ich möchte nun einen Trigger schreiben, der mir bei Änderung (update) von einem Wert aus einer dieser Spalten überprüft, ob die neuen Werte sich mit anderen Werten aus der Tabelle überschneiden.
Zum Beispiel:Beginn_1 = 10.00 Uhr
Dauer_1 = 30minBeginn_neu = 10.20 Uhr
Dauer_neu = 10minAlso ist der neue Wert ungülitg.
Den Trigger habe ich schon geschrieben. Aber ich bekomme dauernd errors, wenn ich einen Update in der besagten Tabelle durchführe:
ORA-06512: at "xxx.PF_UEBERSCHNEIDUNG", line 9 ORA-06512: at "xxx.PF_UEBERSCHNEIDUNG", line 18 ORA-04088: error during execution of trigger 'xxx.PF_UEBERSCHNEIDUNG'
Wo ist denn der Fehler?
create or replace trigger PF_Ueberschneidung before update of beginn, dauer on tab1 for each row declare ende_neu date; beginn_current date; dauer_current integer; ende_current date; cursor andere_werte is select beginn,dauer from tab1 where :old.beginn != beginn and :old.dauer != dauer; begin lock table tab1 in exclusive mode; ende_neu := :new.beginn + :new.dauer /(60*24); open andere_werte; loop fetch andere_werte into beginn_current, dauer_current; exit when andere_werte%NOTFOUND; ende_current := beginn_current + dauer_current / (60*24); if not (ende_neu >= beginn_current or ende_current >= :new.beginn) then raise_application_error(-20007,'Ueberschneidung!'); exit; end if; end loop; close andere_werte; end;
-
Hallo,
Du müsstest eigentlich noch einen anderen Fehler bekommen haben. ORA-6512 zeigt Dir ja nur die Fehlerstelle aber nicht den Grund.
Normalerweise darf man in einem Trigger nicht nochmal auf die Tabelle zugreifen, für die der Trigger geschrieben wurde. Vielleicht löst ja das Dein Problem aus.
mfg Martin