Procédures stockées MySQL : syntaxe et fonctions utiles

Les procédures stockées dans MySQL permettent d'organiser des opérations complexes directement au sein du serveur. Voici une présentation structurée des constructions de contrôle et des fonctions intégrées les plus couramment utilisées.

  1. Structures conditionnelles : IF-THEN-ELSE Permet de tester une condition et d'exécuter un bloc différent selon le résultat.
DELIMITER //

CREATE PROCEDURE traiter_valeur(IN valeur INT)
BEGIN
    DECLARE resultat INT DEFAULT 0;
    SET resultat = valeur - 1;

    IF resultat = 0 THEN
        INSERT INTO utilisateur(nom) VALUES ('cas_spécial');
    ELSE
        INSERT INTO utilisateur(nom) VALUES ('autre_cas');
    END IF;

    IF valeur = 0 THEN
        UPDATE utilisateur SET age = 0 WHERE nom = 'cas_spécial';
    ELSE
        UPDATE utilisateur SET age = 1 WHERE nom = 'cas_spécial';
    END IF;
END //

DELIMITER ;

  1. Sélection multiple : CASE Alternative à plusieurs IF imbriqués, idéal pour des choix multiples.
DELIMITER //

CREATE PROCEDURE selectionner_nom(IN type_val INT)
BEGIN
    CASE type_val
        WHEN 0 THEN INSERT INTO utilisateur(nom) VALUES ('zero');
        WHEN 1 THEN INSERT INTO utilisateur(nom) VALUES ('un');
        ELSE INSERT INTO utilisateur(nom) VALUES ('par_defaut');
    END CASE;
END //

DELIMITER ;

Appel de la procédure :

CALL selectionner_nom(1);

  1. Boucle WHILE Exécute un bloc tant qu'une condition est vraie (test avant l’itération).
DELIMITER //

CREATE PROCEDURE compter_jusqu_a_dix(IN debut INT)
BEGIN
    WHILE debut < 10 DO
        INSERT INTO utilisateur(nom) VALUES ('boucle_while');
        SET debut = debut + 1;
    END WHILE;
END //

DELIMITER ;

  1. Boucle REPEAT Exécute le bloc au moins une fois, puis vérifie la condition après chaque itération (équivalent à do...while).
DELIMITER //

CREATE PROCEDURE compter_avec_repeat(IN init INT)
BEGIN
    REPEAT
        INSERT INTO utilisateur(nom) VALUES ('boucle_repeat');
        SET init = init + 1;
    UNTIL init > 10
    END REPEAT;
END //

DELIMITER ;

La boucle se termine quand init > 10.

  1. Boucle LOOP avec LEAVE Boucle sans condition préalable, contrôlée via LEAVE pour sortir.
DELIMITER //

CREATE PROCEDURE boucle_avec_sortie(IN depart INT)
BEGIN
    boucle: LOOP
        INSERT INTO utilisateur(nom) VALUES ('loop_custom');
        SET depart = depart + 1;
        IF depart > 10 THEN
            LEAVE boucle;
        END IF;
    END LOOP;
END //

DELIMITER ;

  1. Étiquettes (Labels) et ITERATE Les étiquettes permettent de cibler des boucles. ITERATE redémarre une boucle depuis son début.
DELIMITER //

CREATE PROCEDURE iteration_boucle(IN start_val INT)
BEGIN
    DECLARE compteur INT DEFAULT 0;
    
    boucle_etiquette: LOOP
        IF compteur = 3 THEN
            SET compteur = compteur + 1;
            ITERATE boucle_etiquette;
        END IF;
        
        INSERT INTO utilisateur(nom) VALUES ('iteration_test');
        SET compteur = compteur + 1;
        
        IF compteur >= 5 THEN
            LEAVE boucle_etiquette;
        END IF;
    END LOOP;
END //

DELIMITER ;

Fonctinos utiles en contexte de procédure

Manipulation de chaînes de caractères

  • CHARSET(str) – retourne l'ensemble de caractères utilisé.
  • CONCAT(str1, str2, ...) – concatène plusieurs chaînes.
  • INSTR(str, substr) – position de la première occurrence de substr.
  • LEFT(str, n) – extrait les n premiers caractères.
  • SUBSTRING(str, pos, len) – extrait une sous-chaîne à partir de pos (index 1-based).
  • TRIM([BOTH | LEADING | TRAILING] [pad] FROM str) – supprime les espaces ou caractères spécifiés.
  • REPLACE(str, old, new) – remplace toutes les occurrences de old par new.
  • UPPER(str) / LOWER(str) – majuscules/minuscules.
  • SPACE(count) – crée une chaîne de count espaces.

Opérations mathématiques

  • ABS(x) – valeur absolue.
  • CEILING(x) – arrondi supérieur.
  • FLOOR(x) – arrondi inférieur.
  • ROUND(x, d) – arrondi à d décimales.
  • RAND([seed]) – nombre aléatoire entre 0 et 1.
  • POWER(x, y) – x^y.
  • MOD(a, b) – reste de la division a/b.
  • HEX(n) – convertit un nombre entier en hexadécimal.
  • CONV(num, from_base, to_base) – conversion entre bases.

Fonctions temporelles

  • NOW() – date et heure actuelles.
  • CURDATE() – date actuelle.
  • CURTIME() – heure actuelle.
  • DATE_ADD(date, INTERVAL val unit) – ajoute une durée.
  • DATE_SUB(date, INTERVAL val unit) – soustrait une durée.
  • DATEDIFF(date1, date2) – différence en jours.
  • YEAR(date), MONTH(date), HOUR(time) – extraction de parties de date/heure.
  • STR_TO_DATE(str, format) – convertit une chaîne en date selon un format.
  • TIME_TO_SEC(time) – converitt une heure en secondse.

Étiquettes: MySQL procédure stockée contrôle de flux fonctions SQL Gestion de données

Publié le 11 septembre à 17h46