Manipulation des anciennes et nouvelles valeurs dans les triggers

Pour les triggers de type "for each row", les colonnes de la ligne courante doivent être référencées spécifiquement selon que l'on veut l' ancienne ou la nouvelle valeur :

  • :old.nom_colonne

  • :new.nom_colonne

Il ne faut pas lire des données d'une table en cours de modification autrement que par les accès ":old" et ":new".

Anciennes valeurs en lecture seule

Il n'est jamais possible de modifier une colonne ":old".

Valeurs en lecture seule après

Pour les trigger "after", il n'est plus possible de modifier les colonnes ":new".

Valeurs nulles

Pour les triggers "on insert" les colonnes ":old" ont la valeur NULL.

Pour les triggers "on delete" les colonnes ":new" ont la valeur NULL.

Il ne faut pas modifier de données dans les colonnes des "primary key", "foreign key", ou "unique key" d'une table.

BD "Gestion des intervenants" : Trigger de calcul de valeur dérivée

CREATE OR REPLACE TRIGGER trCours
BEFORE INSERT OR UPDATE OF debut ON tCours
FOR EACH ROW
BEGIN
  :new.fin := :new.debut+5;	
END;
/
UPDATE tCours
SET debut=TO_DATE('15-01-2001','DD-MM-YYYY')
WHERE pknum=3;
INSERT INTO tCours (pkannee, pknum, titre, type, fkIntervenant, debut)
VALUES ('2003', tCoursSeq.NEXTVAL, 'SQL', 'C', 'CROZAT', TO_DATE('22-01-2001','DD-MM-YYYY'));
SELECT pknum, debut, fin FROM tCours;
PKNUM DEBUT     FIN     
----- --------- ---------
    1 01-JAN-01           
    2 02-JAN-01           
    3 15-JAN-01 20-JAN-01 
    4 22-JAN-01 27-JAN-01 
AccueilRappels > Rappels triggers > :old et :new< PrécédentSuivant >