sio2:d4-a06-les_procedures_et_fonctions_stockees

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [2025/03/23 21:29] – [Exemples] dthevenotsio2:d4-a06-les_procedures_et_fonctions_stockees [2025/03/24 08:44] (Version actuelle) – [Exemples à tester] dthevenot
Ligne 3: Ligne 3:
  
 Tout comme Oracle possède son langage PL/SQL et MS SQL Server son Transact-SQL, MySQL possède aussi un langage de programmation, et donc MariaDB également. La syntaxe reste propre au SGBD. Tout comme Oracle possède son langage PL/SQL et MS SQL Server son Transact-SQL, MySQL possède aussi un langage de programmation, et donc MariaDB également. La syntaxe reste propre au SGBD.
 +=====  =====
  
 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'utilisation de bibliothèques et de fonctions sur le serveur. Les langages de programmation modernes ont déjà intégré ce type de concept, et l'utilisation de ces langages de programmation externes reste valable et utile en dehors de la base de données. Les procédures stockées permettent aussi l'utilisation de bibliothèques et de fonctions sur le serveur. Les langages de programmation modernes ont déjà intégré ce type de concept, et l'utilisation de ces langages de programmation externes reste valable et utile en dehors de la base de données.
-======  ======+=====  =====
  
 Pourquoi utiliser les PS(procédures stockées)/triggers, quelques exemples en vrac : Pourquoi utiliser les PS(procédures stockées)/triggers, quelques exemples en vrac :
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 (à travers des variables utilisateur, précédées par @, qui sont globales dans une session et peuvent être utilisées en dehors des blocs BEGIN ... END..) 
 + 
 +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 ====
 <code> <code>
 DELIMITER // DELIMITER //
Ligne 32: Ligne 39:
 <code>CALL nomproc(valeurparam);</code> <code>CALL nomproc(valeurparam);</code>
 =====  ===== =====  =====
-==== Exemples ====+==== FONCTION==== 
 +<code> 
 +DELIMITER // 
 +CREATE FUNCTION nomfonction(param1 TYPE, param2 TYPE, ...)   
 +RETURNS TYPE   
 +DETERMINISTIC   
 +BEGIN   
 +    -- Déclarations de variables 
 +    DECLARE variable1 TYPE; 
 + 
 +    -- Logique de la fonction 
 +    SET variable1 = ...; 
 + 
 +    -- Retourner une valeur 
 +    RETURN variable1; 
 +END // 
 +DELIMITER ; 
 +</code> 
 +=====  ===== 
 +Pour appeler la fonction, il est possible d’exécuter la requête SQL suivante: 
 + 
 +<code>SELECT nomfonction(valeurparam1,...);</code> 
 +==== Exemples à tester ==== 
 +<code> 
 +delimiter | 
 +CREATE FUNCTION bonjour (s CHAR(20)) RETURNS CHAR(50) 
 +  RETURN CONCAT('Bonjour, ',s,'!'); 
 +|</code> 
 +  * Que fait cette fonction ? 
 +  * Appel : 
 +  * Afficher le résultat : 
 +=====  =====
 <code> <code>
 delimiter | delimiter |
Ligne 45: Ligne 83:
   * La tester dans le contexte "Parc immobilier" (TP Déclencheurs)   * La tester dans le contexte "Parc immobilier" (TP Déclencheurs)
   * 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://zestedesavoir.com/tutoriels/730/administrez-vos-bases-de-donnees-avec-mysql/952_securiser-et-automatiser-ses-actions/3954_requetes-preparees/|requête dynamique]] avec PREPARE et EXECUTE)
-=====  ===== +
-<code> +
-delimiter | +
-CREATE FUNCTION bonjour (s CHAR(20)) RETURNS CHAR(50) +
-  RETURN CONCAT('Bonjour, ',s,'!'); +
-|</code> +
-  * Que fait cette procédure ? +
-  * Appel : +
-  * Afficher le résultat : +
-  * Modifier cette procédure pour que le nom de y=table soit géré par un paramètre en entrée+
 =====  ===== =====  =====
 +
 ==== Autres commandes ==== ==== Autres commandes ====
 ALTER PROCEDURE | FUNCTION sp_name [characteristic ...] ALTER PROCEDURE | FUNCTION sp_name [characteristic ...]
  • sio2/d4-a06-les_procedures_et_fonctions_stockees.1742761797.txt.gz
  • Dernière modification : 2025/03/23 21:29
  • de dthevenot