Procedures Triggers SQL

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 3

Cours Complet : Procédures Stockées, Triggers et Déclencheurs SQL

1. Introduction Générale
Les bases de données relationnelles modernes doivent non seulement stocker des données,
mais aussi les gérer efficacement. Les procédures stockées permettent d’automatiser les
tâches répétitives tandis que les triggers offrent des solutions pour réagir automatiquement
aux modifications dans les tables.

Exemples de cas d’utilisation :

 - Calcul automatique du total des ventes (procédure).


 - Archivage automatique des données supprimées (trigger).

2. Les Procédures Stockées


Une procédure stockée est un ensemble d'instructions SQL regroupées sous un nom,
stockées dans la base de données et exécutées en une seule fois.

Exemple de procédure avec logique conditionnelle :

DELIMITER //
CREATE PROCEDURE UpdateStock (IN productId INT, IN quantity INT)
BEGIN
IF quantity > 0 THEN
UPDATE Products SET Stock = Stock + quantity WHERE ProductID = productId;
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Quantité invalide';
END IF;
END;
//
DELIMITER ;

Exemple avec utilisation d’un curseur :

DELIMITER //
CREATE PROCEDURE ListHighValueOrders()
BEGIN
DECLARE orderId INT;
DECLARE done INT DEFAULT 0;
DECLARE cur CURSOR FOR SELECT OrderID FROM Orders WHERE TotalAmount > 1000;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN cur;
read_loop: LOOP
FETCH cur INTO orderId;
IF done THEN
LEAVE read_loop;
END IF;
INSERT INTO HighValueOrdersLog (OrderID) VALUES (orderId);
END LOOP;
CLOSE cur;
END;
//
DELIMITER ;

3. Les Triggers (Déclencheurs)


Un trigger (ou déclencheur) est une procédure automatique qui s’exécute en réponse à un
événement (INSERT, UPDATE, DELETE) sur une table.

Exemple : Empêcher la suppression de produits en rupture de stock.

CREATE TRIGGER PreventDeleteOutOfStock


BEFORE DELETE ON Products
FOR EACH ROW
BEGIN
IF OLD.Stock = 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Impossible de supprimer un produit en
rupture de stock';
END IF;
END;

Exemple avancé : Audit des modifications avec OLD et NEW.

CREATE TRIGGER TrackProductUpdates


AFTER UPDATE ON Products
FOR EACH ROW
BEGIN
INSERT INTO ProductAudit (ProductID, OldPrice, NewPrice, UpdateDate)
VALUES (OLD.ProductID, OLD.Price, NEW.Price, NOW());
END;

4. Exercices Pratiques
Exercice 1 : Procédure Stockée pour Gestion de Stock.

Créer une procédure qui :


1. Diminue le stock d’un produit lors d’une commande.
2. Retourne un message si le stock est insuffisant.

Exercice 2 : Création d’un Trigger pour Historique.

Créer un trigger qui enregistre dans une table OrderAudit toutes les commandes annulées.
Exercice 3 : Prévention avec Trigger.

Créer un trigger empêchant la modification du prix d’un produit si la réduction dépasse 50


%.

5. Corrigés et Explications des Exercices


Corrigé de l’exercice 1 :

DELIMITER //
CREATE PROCEDURE ReduceStock (IN productId INT, IN quantity INT)
BEGIN
DECLARE currentStock INT;
SELECT Stock INTO currentStock FROM Products WHERE ProductID = productId;

IF currentStock < quantity THEN


SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Stock insuffisant';
ELSE
UPDATE Products SET Stock = Stock - quantity WHERE ProductID = productId;
END IF;
END;
//
DELIMITER ;

Corrigé de l’exercice 2 :

CREATE TRIGGER LogCancelledOrders


AFTER DELETE ON Orders
FOR EACH ROW
BEGIN
INSERT INTO OrderAudit (OrderID, CustomerID, CancelDate)
VALUES (OLD.OrderID, OLD.CustomerID, NOW());
END;

Corrigé de l’exercice 3 :

CREATE TRIGGER PreventLargeDiscount


BEFORE UPDATE ON Products
FOR EACH ROW
BEGIN
IF (NEW.Price < OLD.Price * 0.5) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Réduction supérieure à 50 % interdite';
END IF;
END;

Vous aimerez peut-être aussi