MariaDB (comme MySQL) permet d’écrire du code SQL réutilisable grâce aux procédures stockées et aux fonctions stockées.
Ces programmes sont stockés côté serveur et exécutés par le SGBD.
DELIMITER // CREATE PROCEDURE nom_procedure( [IN | OUT | INOUT] param_nom TYPE, ... ) BEGIN -- instructions SQL END // DELIMITER ;
CALL nom_procedure(valeurs_param);
DELIMITER // CREATE PROCEDURE sp_nb_logements_vacants(OUT nb INT) BEGIN SELECT COUNT(*) INTO nb FROM logement WHERE etat = 'VACANT'; END // DELIMITER ;
Appel et affichage du résultat :
CALL sp_nb_logements_vacants(@result); SELECT @result AS "Nombre de logements vacants";
DELIMITER // CREATE FUNCTION nom_fonction(param TYPE, ...) RETURNS TYPE DETERMINISTIC BEGIN DECLARE resultat TYPE; -- logique SET resultat = ...; RETURN resultat; END // DELIMITER ;
SELECT nom_fonction(valeur);
DELIMITER // CREATE FUNCTION fn_calcul_tva(prix_ht DECIMAL(10,2)) RETURNS DECIMAL(10,2) DETERMINISTIC BEGIN RETURN prix_ht * 1.20; END // DELIMITER ;
SELECT fn_calcul_tva(100) AS prix_ttc;
On peut intercepter une erreur grâce aux handlers :
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN -- log ou rollback SELECT 'Erreur rencontrée, annulation de la procédure' AS message; ROLLBACK; END;
Quand une requête retourne plusieurs lignes, on peut les parcourir :
DECLARE c CURSOR FOR SELECT nom, prenom FROM locataire; DECLARE CONTINUE HANDLER FOR NOT FOUND SET fini = 1; OPEN c; boucle: LOOP FETCH c INTO v_nom, v_prenom; IF fini = 1 THEN LEAVE boucle; END IF; -- traitement ligne par ligne END LOOP; CLOSE c;