Chcete něco takového:
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;
Aktualizuje však tabulku, kterou spouštěč sleduje, a zdá se pravděpodobné, že spouštěč způsobí aktualizace, které znovu vyvolají spouštěč a zobrazí chybu mutující tabulky.
Možná bude lepší zabalit vaši obchodní logiku do uložené procedury, kde může provést aktualizaci na předchozích řádcích a poté provést vložení/aktualizaci. Potom místo provádění příkazů DML přímo v tabulce vyvolejte uloženou proceduru.