Académique Documents
Professionnel Documents
Culture Documents
d'Oracle
Mcanisme gnral
Les tapes :
- coder le dclencheur
- le compiler == > il sera stock ainsi en base
si le dclencheur est actif
chaque vnement qui caractrise
le dclencheur aura pour
consquence son excution
1- dclaration
CREATE OR REPLACE
TRIGGER trig1
{BEFORE|AFTER| INSTEAD OF}
Nature de lvnement e1
Bloc PL/SQL
2- compilation
3- vnement e1
trig1
Cration de triggers
nom-trigger :doit tre unique dans un
mme schma
Cration du trigger
**)
Cur du trigger
prcise le moment de
l'excution du trigger
**) Pour UPDATE, on peut spcifier une liste de colonnes. Dans ce cas, le trigger ne se dclenchera que
si l'instruction UPDATE porte sur l'une au moins des colonnes prcise dans la liste
Cration de triggers
pseudo-enregistrements
:NEW et :OLD
Utilis dans les trigger ligne
Rfrence aux colonnes dune table : trigger ligne
Dans un trigger ligne, on doit pouvoir accder aux ancienne et nouvelle valeurs de
colonne de la ligne.
on peut accder aux nouvelles valeurs des colonnes de la ligne affecte par la
mise jour prvue par lvnement :
La nouvelle valeur est appele :
:new.nomcolonne
on peut accder aux anciennes valeurs des colonnes de la ligne affecte par la
mise jour prvue par lvnement :
L'ancienne valeur est appele :
:old.nomcolonne
les nouvelles valeurs sont dans
dclencheur sur INSERT,
:new.<nom attribut>
:new.<nom dattribut>
Pas daccs llment NEW
(qui nexiste plus)
Qualifications
Pilote
Brevet nom
PL-1 J.M toto
PL-2 T. Guibert
Michel
PL-3
Tuf
nbhvol
450
comp
AF
nbqualif
3
3400
AF
900
SING
brevet
PL-1
PL-1
PL-1
PL-2
PL-3
typeA
A340
A340
A320
A320
A330
expire
22/06/2005
05/02/2005
16/01/2004
18/01/2004
22/01/2006
question : comment grer des insertion dans la table Qualifications pour rpondre la contrainte cidessus
13
14
Regroupement dvnement
Les prdicats conditionnels INSERTING, DELETING et UPDATING
Possibilit de regrouper des vnements (INSERT, UPDATE ou DELETE) au sein dun
mme dclencheur sils sont de mme type (BEFORE ou AFTER).
utiliser des prdicats conditionnels (INSERTING, DELETING et UPDATING) pour
excuter des blocs de code spcifiques pour chaque instruction de dclenchement.
16
Regroupement dvnement
UPDATING peut tre suivi d'un nom de colonne :
CREATE TRIGGER ...
BEFORE UPDATE OF salaire, commission ON employe
.......
BEGIN
......
IF UPDATING ('salaire') THEN ........
END IF;
......
END;
17
Dclencheur INSTEAD OF
Permet de mettre jour une vue multitable qui ne pouvait pas tre modifie
directement par INSERT, UPDATE ou DELETE
ne font pas intervenir les options BEFORE et AFTER.
Ne sutilise que pour des vues
Pas possible de spcifier une liste de colonne s dans un dclencheur INSTEAD
OF UPDATE
18
Dclencheur INSTEAD OF
Exemple :
pilote
compagni
compe
nrue
CREATE VIEW VueCompPil
AS SELECT c.comp, c.nomcomp, p.brevet,
p.nom, p.nbHvol
FROM Pilot p, Compagnie c
WHERE p.comp = c.comp
AF
SING
124
7
rue
rue 1
rue2
ville
Paris
Singapour
nomComp
Air France
Singapore AL
Dclencheur INSTEAD OF
- Exemple :
CREATE OR REPLACE TRIGGER T_ VueCompPil
INSTEAD OF INSERT ON VueCompPil
FOR EACH ROW
DECLARE
V_comp NUMBER;
V_pil NUMBER;
BEGIN
select count(*) into v_pil from Pilot where brevet=:new.brevet
select count(*) into v_comp from compagnie where comp=:new.comp
if(v_pil >0) then
RAISE_APPLICATION_ERROR(-20103, le pilote existe dj);
else if v_pil=0 THEN
insert into Pilote values(:new.brevet, :new.nom, );
End if;
IF v_comp=0 THEN insert into Compagnie values(:new.comp, null,null, ,
new.nomComp);
ELSE RAISE_APPLICATION_ERROR(-20103, la compagnie existe dj);
END;
20
Activer/dsactiver
21
22