Chcesz coś takiego:
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;
Jednak aktualizuje tabelę monitorowaną przez wyzwalacz i wydaje się prawdopodobne, że wyzwalacz spowoduje aktualizacje, które ponownie wywołają wyzwalacz i wystąpią błąd mutacji tabeli.
Lepiej może być zawinięcie logiki biznesowej w procedurę składowaną, w której może ona wykonać aktualizację poprzednich wierszy, a następnie wykonać wstawianie/aktualizację. Następnie, zamiast wykonywać instrukcje DML bezpośrednio w tabeli, zamiast tego wywołaj procedurę składowaną.