Prédicats d'événement au sein des triggers
INSERTING
DELETING
UPDATING
UPDATING(nom_colonne)
Prédicats pour savoir dans quel contexte d'appel du trigger on est, ce qui permet dans un même trigger de s'adapter aux différents cas de déclenchement.
Rappel : BD "Gestion des intervenants" : Schéma relationnel
CTRL+C pour copier, CTRL+V pour coller
1
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer)
2
tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)
tIntervenant (#pknom:varchar, prenom:varchar, poste:integer) tCours (#pkannee:2000..2100, #pknum:integer, titre:varchar, type:C|TD|TP, fkintervenant=>tIntervenant, debut:date)
Exemple : BD "Gestion des intervenants" : Trigger d'archivage de données
CTRL+C pour copier, CTRL+V pour coller
1
CREATE TABLE tIntervenantSav (
2
pknom varchar2(20) PRIMARY KEY,
3
prenom varchar2(20) NOT NULL
4
);
5
6
CREATE OR REPLACE TRIGGER trIntervenant
7
BEFORE DELETE OR INSERT ON tIntervenant
8
FOR EACH ROW
9
BEGIN
10
IF DELETING THEN
11
INSERT INTO tIntervenantSav VALUES (:old.pknom, :old.prenom);
12
ELSIF INSERTING THEN
13
DELETE FROM tIntervenantSav WHERE pknom = :new.pknom;
14
END IF;
15
END;
16
/
17
18
DELETE FROM tCours;
19
DELETE FROM tIntervenant;
20
SELECT * FROM tIntervenantSav;
CREATE TABLE tIntervenantSav ( pknom varchar2(20) PRIMARY KEY, prenom varchar2(20) NOT NULL ); CREATE OR REPLACE TRIGGER trIntervenant BEFORE DELETE OR INSERT ON tIntervenant FOR EACH ROW BEGIN IF DELETING THEN INSERT INTO tIntervenantSav VALUES (:old.pknom, :old.prenom); ELSIF INSERTING THEN DELETE FROM tIntervenantSav WHERE pknom = :new.pknom; END IF; END; / DELETE FROM tCours; DELETE FROM tIntervenant; SELECT * FROM tIntervenantSav;
CTRL+C pour copier, CTRL+V pour coller
1
INSERT INTO tIntervenant (pknom, prenom, poste)
2
VALUES ('CROZAT', 'Stéphane', '4287');
3
4
SELECT * FROM tIntervenantSav;
INSERT INTO tIntervenant (pknom, prenom, poste) VALUES ('CROZAT', 'Stéphane', '4287'); SELECT * FROM tIntervenantSav;