146
Chapitre 6 • SQL avancé
L'avantage d'une procédure SQL par rapport à une procédure intégrée à un
programme d'application est qu'elle est stockée dans la base de données et qu'elle
peut donc être considérée comme une ressource unique et commune pour toutes les
applications, évitant à celles-ci une duplication de code intempestive. Elle permet
aussi de définir des comportements complexes, en particulier en ce qui concerne
l'intégrité des données.
A titre d'exemple, la procédure SUP_DETAIL supprime la ligne de détail dont elle
reçoit (in) le numéro de commande (COM) et le numéro de produit (PRO). Si cette
ligne est la dernière de sa commande, cette dernière est également supprimée 14 :
create procedure SUP_DETAIL (in COM char(12),
in PRO char(15))
begin
delete from DETAIL
where NCOM = :COM and NPRO = :PRO;
if (select count(*) from DETAIL
where NCOM=:COM) = 0
then delete from COMMANDE
where NCOM = :COM
end if;
end;
On pourra l'invoquer par une commande telle que la suivante :
call SUP_DETAIL('30182','PA60');
6.6 LES DÉCLENCHEURS (triggers)
Un trigger est un mécanisme constitué d'une section de code accompagnée des
conditions qui entraînent son exécution. Sa forme générale est la suivante :
before/after E
when C
begin
A
end
et s'interprète de la manière suivante : dès qu’un événement E survient, si la condition C est satisfaite, alors exécuter l'action A soit avant (before) soit après (after) E.
De cette forme découle le nom de mécanisme E-C-A (événement-conditionaction). On considère quatre types d'événements : insertion d'une ligne, suppression
d'une ligne, modification d'une ligne (toutes colonnes confondues) et modification
d'une colonne d'une ligne.
14. Cette procédure, ainsi que les déclencheurs de la section suivante sont rédigés dans une
syntaxe fictive proche de celle de PL/SQL d’Oracle ou du langage d’InterBase. On notera que
l’usage d’un argument est préfixé de ":" afin d’éviter toute ambiguïté avec un nom de colonne.
Précédent

- 146/436

Suivant