Oracle
 sql >> Base de données >  >> RDS >> Oracle

Problèmes de modification de la date avec un déclencheur dans Oracle

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.