next up previous
Next: Requêtes SQL Up: Création d'un schéma relationnel Previous: Vues

Triggers

Indication importante: la dernière ligne de création d'un trigger doit être un END;, suivie d'une ligne contenant seulement '/'.

1.
Implantez par un trigger la règle suivante: si le prix d'une activité baisse, alors le tarif de la station doit augmenter de la différence.

Indication: le trigger doit se déclencher sur une modification, et tester pour chaque ligne que la nouvelle valeur est plus grande que l'ancienne. Si ce n'est pas le cas, faire un UPDATE de la station pour ajouter la différence entre l'ancienne et la nouvelle valeur.

2.
Faites l'expérience: diminuez le prix d'une activité, et regardez ce qui se passe pour la station.


Solution :

CREATE TRIGGER prix_croissant
AFTER UPDATE ON Activite
FOR EACH ROW
WHEN (new.prix < old.prix)
BEGIN
  UPDATE Station SET tarif = tarif +  :old.prix - :new.prix
  WHERE  nomStation = :new.nomStation;
END;
/


3.
On veut disposer de l'information nbActivites dans la table Station. Pour cela:
(a)
Ajoutez la colonne nbActivites avec pour valeur par défaut 0.
(b)
Créez un trigger qui maintient cette information.


Solution :

ALTER TABLE Station ADD (nbActivites NUMBER (3) DEFAULT 0);
         
CREATE TRIGGER nb_activites
AFTER INSERT OR DELETE ON Activite
BEGIN
  UPDATE Station S
  SET nbActivites = (SELECT COUNT (*) FROM Activite A
                      WHERE S.nomStation = A.nomStation);
END;
/

Autre possibilité: un trigger par ligne sur les évènements INSERT et DELETE.




Philippe Rigaux
2000-02-03