Administrer et exploiter des bases de données
Jour 6 - Triggers
# Objectifs du jour
Théorie sur les triggers
Séquences oracles
Exercices triggers
# Corrections des exercices
Correction de l'exercice 4.6 - PL/SQL avec exceptions
# Triggers
# Triggers
Une séquence Oracle est un objet de base de données qui génère automatiquement des nombres uniques et séquentiels. Elle est souvent utilisée pour créer des clés primaires ou des identifiants uniques pour les tables.
Pour créer une séquence, on utilise la commande CREATE SEQUENCE avec plusieurs options :
CREATE SEQUENCE nom_sequence
INCREMENT BY intervalle
START WITH valeur_initiale
MINVALUE valeur_min
MAXVALUE valeur_max
CYCLE | NOCYCLE
CACHE taille_cache | NOCACHE
ORDER | NOORDER;
Pour obtenir la prochaine valeur d'une séquence, on utilise la pseudo-colonne NEXTVAL :
Pour obtenir la valeur courante, on utilise CURRVAL :
SELECT nom_sequence.NEXTVAL FROM dual;
SELECT nom_sequence.CURRVAL FROM dual;
# Triggers
Exemple pour la clé primaire des clients :
-- Créer un trigger pour alimenter automatiquement la colonne de clé primaire
CREATE OR REPLACE TRIGGER trg_pk_cli_auto
BEFORE INSERT ON clients
FOR EACH ROW
BEGIN
IF :NEW.pk_cli IS NULL THEN
:NEW.pk_cli := seq_clients.NEXTVAL;
END IF;
END;
/
CREATE SEQUENCE seq_clients
START WITH 1
INCREMENT BY 1
Puis un trigger est utilisé pour ajouter automatiquement le prochain nombre à la PK :
Exercice 5.1
Ajouter des séquences au script de
création du magasin :
# Triggers
Exemple de trigger :
CREATE OR REPLACE TRIGGER verif_salaire
BEFORE INSERT OR UPDATE employes
FOR EACH ROW
WHEN (new.pourcentage_emp > 50)
BEGIN
IF :NEW.salaire > 4000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Le salaire ne peut pas dépasser 400.');
END IF;
END verif_salaire;
/
Ordre des triggers pour déterminer quand oracle déclenche le trigger :
La définition comprend le type d'instruction SQL qui déclenche le
trigger :
La définition du trigger précise la table associée au trigger
# Triggers
# Triggers
Type de trigger :
CREATE OR REPLACE TRIGGER verif_salaire
BEFORE INSERT OR UPDATE employes
FOR EACH ROW
WHEN (new.pourcentage_emp > 50)
BEGIN
IF :NEW.salaire > 4000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Le salaire ne peut pas dépasser 400.');
END IF;
END verif_salaire;
/
# Triggers
Exercice 5.2
Création d'un trigger pour enregistrer
la date de modification :
# Triggers
# Triggers
CREATE TRIGGER ...
BEFORE INSERT OR UPDATE ON employe
BEGIN
IF INSERTING THEN
...
END IF;
IF UPDATING THEN
...
END IF;
END;
/
# Triggers
CREATE TRIGGER ...
BEFORE INSERT OR UPDATE ON employe
BEGIN
IF INSERTING THEN
...
END IF;
IF UPDATING('salaire') THEN
...
END IF;
END;
/
salaire
est modifiée dans l'instruction UPDATE
# Triggers
ALTER TRIGGER nomtrigger DISABLE;
ALTER TABLE nomtable DISABLE ALL TRIGGERS;
ALTER TRIGGER nomtrigger ENABLE;
ALTER TABLE nomtable ENABLE ALL TRIGGERS;
Exercice 5.3
Trigger pour historisation et utilisation
des prédicats (INSERTING, etc) :
# Triggers
Exercice 5.4
Exercice complet avec gestion de
stock sur le magasin :
# Triggers
# Travail pour la prochaine fois
Terminer les exercices sur les triggers (série 5)
Mettre à jour ses notes
Mettre à jour le Mindmap
Révision (Flashcards) : [https://app.wooflash.com/join/OS7OUAGS](https://app.wooflash.com/join/OS7OUAGS?from=1)
Merci de votre attention 😊
Bonne fin de journée !