Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sio2:d4-a06-les_procedures_et_fonctions_stockees [2024/11/21 15:16] – [Les curseurs] dthevenot | sio2:d4-a06-les_procedures_et_fonctions_stockees [2025/03/24 08:44] (Version actuelle) – [Exemples à tester] dthevenot | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
~~SLIDESHOW~~ | ~~SLIDESHOW~~ | ||
- | ====== Les fonctions et les procédures stockées avec Mysql ====== | + | ====== |
Tout comme Oracle possède son langage PL/SQL et MS SQL Server son Transact-SQL, | Tout comme Oracle possède son langage PL/SQL et MS SQL Server son Transact-SQL, | ||
+ | ===== ===== | ||
Une procédure stockée, aussi appelée **stored procedure** en anglais, est un concept utilisé en administration de base de données afin d’exécuter un ensemble d’instructions SQL. Une telle procédure est stockée au sein du Système de Gestion de Base de Donneés (SGBD) et peut être appelée à tout moment par son nom afin d’exécuter celle-ci. | Une procédure stockée, aussi appelée **stored procedure** en anglais, est un concept utilisé en administration de base de données afin d’exécuter un ensemble d’instructions SQL. Une telle procédure est stockée au sein du Système de Gestion de Base de Donneés (SGBD) et peut être appelée à tout moment par son nom afin d’exécuter celle-ci. | ||
+ | ===== ===== | ||
Les procédures stockées permettent aussi l' | Les procédures stockées permettent aussi l' | ||
- | ====== | + | ===== ===== |
Pourquoi utiliser les PS(procédures stockées)/ | Pourquoi utiliser les PS(procédures stockées)/ | ||
Ligne 16: | Ligne 18: | ||
===== Syntaxe ===== | ===== Syntaxe ===== | ||
- | Les procédures stockées et les fonctions sont créées avec les commandes **CREATE PROCEDURE** et **CREATE FUNCTION**. Une procédure est appelée avec la commande **CALL**, et ne peut retourner de valeur que via les variables de retour. Les fonctions peuvent retourner une valeur scalaire, et être appelées depuis une commande, tout comme toute autre fonction. Les procédures stockées peuvent appeler une autre routine stockée. Une routine est une procédure stockée ou une fonction. | + | Les procédures stockées et les fonctions sont créées avec les commandes **CREATE PROCEDURE** et **CREATE FUNCTION**. |
+ | |||
+ | Une procédure est appelée avec la commande **CALL**, et ne peut retourner de valeur que via les variables de retour | ||
+ | |||
+ | Les fonctions peuvent retourner une valeur scalaire, et être appelées depuis une commande, tout comme toute autre fonction. Les procédures stockées peuvent appeler une autre routine stockée. Une routine est une procédure stockée ou une fonction. | ||
===== ===== | ===== ===== | ||
+ | ==== PROCEDURE ==== | ||
< | < | ||
DELIMITER // | DELIMITER // | ||
Ligne 32: | Ligne 39: | ||
< | < | ||
===== ===== | ===== ===== | ||
- | ==== Exemples | + | ==== FONCTION==== |
< | < | ||
- | delimiter | | + | DELIMITER // |
- | CREATE | + | CREATE |
- | BEGIN | + | RETURNS TYPE |
- | SELECT COUNT(*) INTO param1 FROM t; | + | DETERMINISTIC |
- | END | + | BEGIN |
- | | | + | -- Déclarations de variables |
+ | DECLARE variable1 TYPE; | ||
+ | |||
+ | -- Logique de la fonction | ||
+ | SET variable1 = ...; | ||
+ | |||
+ | -- Retourner une valeur | ||
+ | RETURN variable1; | ||
+ | END // | ||
+ | DELIMITER ; | ||
</ | </ | ||
- | * Que fait cette procédure ? | ||
- | * Appel : | ||
- | * Afficher le résultat : | ||
===== ===== | ===== ===== | ||
+ | Pour appeler la fonction, il est possible d’exécuter la requête SQL suivante: | ||
+ | |||
+ | < | ||
+ | ==== Exemples à tester ==== | ||
< | < | ||
delimiter | | delimiter | | ||
Ligne 50: | Ligne 67: | ||
RETURN CONCAT(' | RETURN CONCAT(' | ||
|</ | |</ | ||
+ | * Que fait cette fonction ? | ||
+ | * Appel : | ||
+ | * Afficher le résultat : | ||
+ | ===== ===== | ||
+ | < | ||
+ | delimiter | | ||
+ | CREATE PROCEDURE simpleproc (OUT param1 INT) | ||
+ | BEGIN | ||
+ | | ||
+ | END | ||
+ | | | ||
+ | </ | ||
* Que fait cette procédure ? | * Que fait cette procédure ? | ||
* Appel : | * Appel : | ||
+ | * La tester dans le contexte "Parc immobilier" | ||
* Afficher le résultat : | * Afficher le résultat : | ||
+ | * Modifier cette procédure pour que le nom de la table soit géré par un paramètre en entrée (☝En MySQL, les noms de tables ne peuvent pas être passés dynamiquement comme des paramètres dans une requête SQL classique. Pour contourner cela, il faut utiliser une [[https:// | ||
===== ===== | ===== ===== | ||
+ | |||
==== Autres commandes ==== | ==== Autres commandes ==== | ||
ALTER PROCEDURE | FUNCTION sp_name [characteristic ...] | ALTER PROCEDURE | FUNCTION sp_name [characteristic ...] | ||
Ligne 93: | Ligne 125: | ||
FETCH curseur INTO var1, ...; -- lecture d'une ligne du jeu d' | FETCH curseur INTO var1, ...; -- lecture d'une ligne du jeu d' | ||
IF ok = 1 THEN -- test fin du jeu d' | IF ok = 1 THEN -- test fin du jeu d' | ||
- | LEAVE tarif_loop; | + | LEAVE tarif_loop; |
END IF; | END IF; | ||
-- traitement de la ligne lue | -- traitement de la ligne lue | ||
Ligne 101: | Ligne 133: | ||
[[Exercice d' | [[Exercice d' | ||
+ | |||