Sie wollen so etwas:
CREATE OR REPLACE TRIGGER TRIGGER_D
BEFORE
INSERT OR UPDATE ON CONTRACTS
FOR EACH ROW
DECLARE
BEGIN
UPDATE CONTRACTS
SET ENDDATE = :NEW.STARTDATE - INTERVAL '1' DAY
WHERE CLIENTID = :NEW.CLIENTID
AND ENDDATE > :NEW.STARTDATE
AND STARTDATE < :NEW.STARTDATE;
END;
Es aktualisiert jedoch die Tabelle, die der Trigger überwacht, und es scheint wahrscheinlich, dass der Trigger Aktualisierungen verursacht, die den Trigger erneut aufrufen und einen mutierenden Tabellenfehler erhalten.
Möglicherweise ist es besser, Ihre Geschäftslogik in eine gespeicherte Prozedur einzuschließen, in der sie die Aktualisierung der vorherigen Zeilen durchführen und dann die Einfügung/Aktualisierung durchführen kann. Rufen Sie dann die gespeicherte Prozedur auf, anstatt DML-Anweisungen direkt für die Tabelle auszuführen.