Gestion des structures de contrôle et utilisation des fonctions dans MySQL

Le scripting au sein de MySQL, notamment via les procédures stockées, permet d'implémenter une logique métier complexe directement au niveau de la base de données. Cet article explore les mécanismes de contrôle de flux et les fonctions intégrées essentielles à la manipulation des données.

Structures de contrôle de flux

Les structures de contrôle permettent de diriger l'exécution du code en fonction de conditions spécifiques ou de répéter des blocs d'instructions.

1. L'instruction conditionnelle IF

L'instruction IF évalue une condition booléenne pour déterminer le chemin d'exécution.

DELIMITER //

CREATE PROCEDURE sp_evaluer_valeur(IN p_seuil INT)
BEGIN
    DECLARE v_resultat INT DEFAULT 0;

    IF p_seuil > 100 THEN
        SELECT 'Valeur haute' AS statut;
    ELSEIF p_seuil > 50 THEN
        SELECT 'Valeur moyenne' AS statut;
    ELSE
        SELECT 'Valeur basse' AS statut;
    END IF;
END //

DELIMITER ;

2. Les structures de boucles

MySQL propose pluseiurs types de boucles, dont WHILE et REPEAT.

Exemple avec WHILE : La boucle continue tant que la condition est vraie.

DELIMITER //

CREATE PROCEDURE sp_boucle_incrementale()
BEGIN
    DECLARE v_compteur INT DEFAULT 1;

    WHILE v_compteur <= 5 DO
        SELECT CONCAT('Itération numéro : ', v_compteur);
        SET v_compteur = v_compteur + 1;
    END WHILE;
END //

DELIMITER ;

Exemple avec REPEAT : La boucle s'exécute au moins une fois et s'arrête lorsque la condition UNTIL devient vraie.

DELIMITER //

CREATE PROCEDURE sp_boucle_repeat()
BEGIN
    DECLARE v_index INT DEFAULT 0;

    REPEAT
        SET v_index = v_index + 1;
        SELECT v_index;
    UNTIL v_index >= 3
    END REPEAT;
END //

DELIMITER ;

Fonctions intégrées et manipulation de données

Contrairement aux procédures stockées, les fonctions intégrées de MySQL sont principalement utilisées au sein des instructions DML (Data Manipulation Language) pour transformer les résultats.

Fonctions de traitement de chaînes et divers

  • Nettoyage : TRIM(), LTRIM(), RTRIM() supprimant les espaces ou caractères indésirables.
  • Casse : LOWER() et UPPER() modifient la capitalisation des chaînes.
  • Extraction : LEFT(str, len) et RIGHT(str, len) récupèrent une portion de texte.
  • Phonétique : SOUNDEX() permet de comparer des chaînes basées sur leur prononciation anglaise, utile pour la recherche de noms mal orthographiés.

Application pratique : Gestion des dates avec DATE_FORMAT

La gestion du temps est cruciale. La fonction DATE_FORMAT() est l'outil privilégié pour transformer un type DATETIME en chaîne lisible ou exploitable pour des regroupements.

Considérons une table de publications pour illustrer l'extraction statistique :

CREATE TABLE publications (
    pub_id INT PRIMARY KEY AUTO_INCREMENT,
    titre VARCHAR(100),
    date_creation DATETIME
);

INSERT INTO publications (titre, date_creation) VALUES
('Article Alpha', '2023-01-10 09:00:00'),
('Article Beta', '2023-01-15 14:30:00'),
('Article Gamma', '2023-02-05 10:00:00'),
('Article Delta', '2023-03-12 11:15:00'),
('Article Epsilon', '2023-03-25 16:45:00');

-- Extraction du nombre d'articles publiés par mois
SELECT 
    DATE_FORMAT(date_creation, '%Y-%m') AS mois_publication, 
    COUNT(pub_id) AS total_articles
FROM 
    publications
GROUP BY 
    mois_publication;

Pour filtrer les données temporelles, deux approches sont courantes :

-- Approche par fonction DATE()
SELECT * FROM publications WHERE DATE(date_creation) = '2023-01-10';

-- Approche par extraction de composants
SELECT * FROM publications WHERE YEAR(date_creation) = 2023 AND MONTH(date_creation) = 3;

D'autres fonctions temporelles comme DATEDIFF() (calcul d'écart entre deux dates) ou DATE_ADD() (incrémentation d'une valeur temporelle) complètent l'arsenal SQL pour le traitement des données chronologiques.

Étiquettes: MySQL SQL stored-procedures database date-functions

Publié le 24 juillet à 12h27