Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
d4:c05 [2025/10/01 15:07] – créée dthevenot | d4:c05 [2025/10/01 17:44] (Version actuelle) – [6. Bonnes pratiques professionnelles] dthevenot | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== D4-C05 : Procédures stockées et fonctions avec MariaDB ====== | ====== D4-C05 : Procédures stockées et fonctions avec MariaDB ====== | ||
+ | |||
+ | ===== Ressources ===== | ||
+ | |||
+ | * Documentation officielle [[https:// | ||
+ | * Bonnes pratiques SQL : conventions de nommage et gestion des droits | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * Tutoriels professionnels (Zeste de savoir, Percona, MariaDB docs). | ||
===== 1. Introduction ===== | ===== 1. Introduction ===== | ||
MariaDB (comme MySQL) permet d’écrire du code SQL réutilisable grâce aux **procédures stockées** et aux **fonctions stockées.** | MariaDB (comme MySQL) permet d’écrire du code SQL réutilisable grâce aux **procédures stockées** et aux **fonctions stockées.** | ||
Ligne 45: | Ligne 53: | ||
</ | </ | ||
- | ==== 3. Fonctions stockées ==== | + | ===== 3. Fonctions stockées |
- | + | ==== Syntaxe générale | |
- | Syntaxe générale | + | < |
DELIMITER // | DELIMITER // | ||
CREATE FUNCTION nom_fonction(param TYPE, ...) | CREATE FUNCTION nom_fonction(param TYPE, ...) | ||
Ligne 59: | Ligne 67: | ||
END // | END // | ||
DELIMITER ; | DELIMITER ; | ||
+ | </ | ||
+ | ==== Appel : ==== | ||
+ | < | ||
- | 👉 Appel : | + | ==== Exemple simple |
- | + | < | |
- | SELECT nom_fonction(valeur); | + | |
- | + | ||
- | Exemple simple | + | |
DELIMITER // | DELIMITER // | ||
CREATE FUNCTION fn_calcul_tva(prix_ht DECIMAL(10, | CREATE FUNCTION fn_calcul_tva(prix_ht DECIMAL(10, | ||
Ligne 74: | Ligne 82: | ||
END // | END // | ||
DELIMITER ; | DELIMITER ; | ||
+ | </ | ||
+ | ==== Utilisation : ==== | ||
+ | < | ||
- | Utilisation : | + | ===== 4. Gestion des erreurs |
- | + | ||
- | SELECT fn_calcul_tva(100) AS prix_ttc; | + | |
- | + | ||
- | 4. Gestion des erreurs | + | |
On peut intercepter une erreur grâce aux handlers : | On peut intercepter une erreur grâce aux handlers : | ||
+ | < | ||
DECLARE EXIT HANDLER FOR SQLEXCEPTION | DECLARE EXIT HANDLER FOR SQLEXCEPTION | ||
BEGIN | BEGIN | ||
Ligne 90: | Ligne 96: | ||
| | ||
END; | END; | ||
- | + | </ | |
- | 5. Curseurs | + | ===== 5. Curseurs |
Quand une requête retourne plusieurs lignes, on peut les parcourir : | Quand une requête retourne plusieurs lignes, on peut les parcourir : | ||
+ | < | ||
DECLARE c CURSOR FOR SELECT nom, prenom FROM locataire; | DECLARE c CURSOR FOR SELECT nom, prenom FROM locataire; | ||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fini = 1; | DECLARE CONTINUE HANDLER FOR NOT FOUND SET fini = 1; | ||
- | |||
OPEN c; | OPEN c; | ||
boucle: LOOP | boucle: LOOP | ||
Ligne 107: | Ligne 111: | ||
END LOOP; | END LOOP; | ||
CLOSE c; | CLOSE c; | ||
+ | </ | ||
+ | ===== 6. Bonnes pratiques professionnelles ===== | ||
+ | - Nommage clair : sp_ pour procédures, | ||
+ | - Commenter chaque procédure (auteur, date, rôle, paramètres). | ||
+ | - Centraliser la logique métier sensible dans des procédures. | ||
+ | - Versionner les scripts SQL dans Git. | ||
+ | - Donner des droits d’exécution sur les procédures plutôt que des droits directs sur les tables. | ||
- | 6. Bonnes pratiques professionnelles | + | [[d4:A06]] |
- | + | ||
- | Nommage clair : sp_ pour procédures, | + | |
- | + | ||
- | Commenter chaque procédure (auteur, date, rôle, paramètres). | + | |
- | + | ||
- | Centraliser la logique métier sensible dans des procédures. | + | |
- | + | ||
- | Versionner les scripts SQL dans Git. | + | |
- | + | ||
- | Donner des droits d’exécution sur les procédures plutôt que des droits directs sur les tables. | + |