Vous voulez quelque chose comme ça :
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;
Cependant, il met à jour la table que le déclencheur surveille et il semble probable que le déclencheur provoquera des mises à jour qui invoqueront à nouveau le déclencheur et obtiendront une erreur de table en mutation.
Vous feriez peut-être mieux d'envelopper votre logique métier dans une procédure stockée où elle peut effectuer la mise à jour sur les lignes précédentes, puis effectuer l'insertion/la mise à jour. Ensuite, plutôt que d'exécuter des instructions DML directement sur la table, appelez plutôt la procédure stockée.