09 Triggers
09 Triggers
09 Triggers
EN
PL/SQL
1,1 1,1
Fournisseur
CodeFournisseur 1,n
Rai sonSoci al e Fournir >
Contact
Adresse
Vi l l e
CodePostal
Pays Categorie
1,n
T el ephone CodeCategorie Appartenir
Emai l Li bel l eCategori e
Si teWeb Descri pti on
Il l ustrati on
2
Hassouni Larbi PL/SQL : Eléménts de base du langage 3
Hassouni Larbi PL/SQL : Eléménts de base du langage 4
Vue générale sur les Triggers
Un trigger est un bloc PL / SQL nommé stocké dans la base de données
Oracle et exécuté automatiquement lorsqu'un événement déclencheur
se produit. L'événement peut être l'un des suivants :
• Exécution d'une instruction de langage de manipulation de données
(LMD) sur une table, par exemple, INSERT, UPDATE ou DELETE. Par
exemple, il est possible de définir un trigger qui s'exécute
automatiquement lorsqu'on insère une nouvelle ligne dans la table
Employé. L'exécution peut être faite avant ou après l'insertion de la
ligne selon ce qui a été spécifié dans la définition du trigger.
• Exécution d'une instruction LDD (Langage de Définition des
Données), par exemple, une instruction CREATE, ALTER ou DROP.
Ces déclencheurs sont souvent utilisés à des fins d’audit pour
enregistrer les modifications du schéma.
• Un événement système tel que le démarrage ou l’arrêt de la base
de données Oracle.
• Un événement utilisateur tel que connexion ou déconnexion.
Le fait d’exécuter un trigger est également appelé déclenchement (to
fire) d’un trigger. Nous disons que le trigger est déclenchée.
• SQL Developer,
• SQL*Plus
• ou Enterprise Manager.
Supposons que nous voulions enregistrer des actions sur la table Client
chaque fois qu'un client est mis à jour ou supprimé. Pour faire ceci:
Commençons d'abord par créer une nouvelle table pour enregistrer les
événements UPDATE et DELETE:
UPDATE Client
SET Ville = 'Rabat'
WHERE CodeClient = 'CLT002';
déclenche le trigger après la mise à jour d’une ligne de la table Client.
À l'intérieur du déclencheur, nous déterminons l'action en cours, qu'il s'agisse
de UPDATE ou DELETE, et insérons une ligne dans la table des audits.
Maintenant, vérifiez le contenu de la table Audits pour voir si le trigger a été
activé:
SELECT *
FROM Audits;
SELECT *
FROM Audits;
La sortie a montré qu'une nouvelle ligne a été insérée. Cela signifie que
l'action DELETE a déclenché le trigger.
DECLARE
l_transaction VARCHAR2(10);
BEGIN
-- determine le type de la transaction
l_transaction := CASE
WHEN UPDATING THEN 'UPDATE'
WHEN DELETING THEN 'DELETE'
END;
Notez que Oracle annule automatiquement la mise à jour car nous appelons
la procédure raise_application_error dans le déclencheur.
BEGIN
INSERT INTO logon_audit (current_username, current_date)
VALUES (USER, SYSDATE);
END;
/
DECLARE
-- Déclarations de variables
BEGIN
-- Code dut trigger
EXCEPTION
-- Gestionnaire des exceptions
END <nom_trigger>;
/
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
-- exception handlers
END <trigger_name>;
/
DECLARE
oper ddl_log.operation%TYPE;
BEGIN
INSERT INTO ddl_log
SELECT ora_sysevent, ora_dict_obj_owner,
ora_dict_obj_name, NULL, USER, SYSDATE
FROM DUAL;
END BeforeCreate_trigger;
/