172
Chapitre 7 • Applications avancées en SQL
Toutes les autres opérations sont sans effet sur la relation exprimant la redondance.
Nous devons pour chacun de ces événements écrire un déclencheur qui actualise la
valeur de MONTANT. Celui qui correspond au premier se présenterait comme suit :
create trigger MONTANT_INS_DET
after insert on DETAIL
for each row
declare P decimal(6)
begin
select PRIX into :P from PRODUIT
where NPRO = new.NPRO;
update DETAIL
set
MONTANT = QCOM * :P
where NCOM = new.NCOM and NPRO = new.NPRO;
end;
ou encore, plus simplement, sous la forme suivante :
create trigger MONTANT_INS_DET
before insert on DETAIL
for each row
declare P decimal(6)
begin
select PRIX into :P from PRODUIT
where NPRO = new.NPRO;
new.MONTANT = new.QCOM * :P;
end;
7.2.4 Les alerteurs
Un alerteur est un mécanisme qui envoie automatiquement un message dès qu’une
situation déterminée se présente dans le domaine d’application. Il s’agit de situations requérant une intervention de la part d’un agent extérieur, humain ou
programmé. Tel serait le cas d’un comportement dangereux dans une centrale électrique, de mouvements bancaires douteux de la part d’un client ou d’une demande
d’un produit qui dépasserait la normale. Si la situation, ou l’événement qui entraîne
celle-ci, peuvent se détecter par un état particulier des données, ou par une transition
d’états, alors il est possible de développer des alerteurs sous la forme de déclencheurs.
Dans l’exemple ci-dessous, le passage sous zéro du stock d’un produit constitue
un événement dont le gestionnaire des approvisionnements doit être averti le plus
rapidement possible. Il existe plusieurs réactions possibles dans ce type de
problèmes. Si le langage procédural des déclencheurs permet l’invocation de
programmes externes, alors on pourra envoyer un courriel au gestionnaire l’avertissant du problème. Dans le cas contraire, on pourra utiliser la technique suivante. Le
déclencheur écrit dans une table ALERTE un enregistrement décrivant la situation.
A intervalle régulier, toutes les 10 secondes par exemple, une petite procédure
consulte cette table, y repère les enregistrements non encore traités, pour chacun
Précédent

- 172/436

Suivant