Du vil have noget som dette:
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;
Det er dog ved at opdatere tabellen, som triggeren overvåger, og det virker sandsynligt, at triggeren vil forårsage opdateringer, der vil påkalde triggeren igen og få en mutationstabelfejl.
Det er måske bedre at pakke din forretningslogik ind i en lagret procedure, hvor den kan udføre opdateringen på de foregående rækker og derefter foretage indsættelsen/opdateringen. Så, i stedet for at udføre DML-sætninger direkte på bordet, påkald i stedet den lagrede procedure.