Créer une procédure stockée

Décembre 2012

Les procédures stockées sont des morceaux de code SQL présent dans une base de données et qui peut être appelé via une requête SQL.

MySQL supporte les procédures stockées depuis la version 5. Le nom officiel des procédures stockées dans MySQL est : stored routine.

Techniquement elles ne permettent pas de faire plus de choses que des requêtes SQL traditionnelles, mais elles présentent quand même des intérêts de taille :

Performance

Les procédures stockées sont pré compilé pas le serveur, du coup on économise le temps nécessaire à l'analyse et au décodage d'une requête SQL normale.

Ensuite, on économise les échanges d'information entre le client (par exemple : PHP) et le serveur SQL, ce qui procure un gain de temps supplémentaire.

Sécurité

Contrairement aux clauses (SELECT, INSERT, UPDATE) qui ont un champ d'application très large, une procédure stockée ne fait que ce pour quoi elle a été conçue. Du coup on peut gérer les droits des utilisateurs avec beaucoup plus de finesse, en autorisant l'utilisation de telle procédure plutôt que d'autoriser les INSERT et/ou les UPDATE.

Simplicité

Les procstock (c'est le petit surnom des procédures stockées, dans le jargon) embarquent une partie de code métier, qui a été déplacé de l'applicatif (ex: PHP) vers la base de données. Du coup on obtient un certain niveau d'abstraction par rapport au modèle physique de donnée, qui est plus simple à manipuler pour les développeurs.

Création d'une procédure stockée

Comme pour les vues, je ne saurais trop vous conseiller d'utiliser un outil d'administration MySQL comme phpMyAdmin ou l'excellent HeidiSQL.

Le champ principal contient le code source de la procstock. Ce bloc commence toujours par BEGIN et finit par END.

Ensuite il y a d'autres champs comme le nom, les droits (permettant de restreindre l'accès aux donnéesà la procédure) :

Création de procédure stockée MySQL, HeidiSQL

Au final, voici à quoi ressemble le code SQL de création d'une procédure stockée :

CREATE DEFINER=`root`@`localhost` PROCEDURE `sr_update_connectes`(IN `param_older_than` INT, IN `param_ip` VARCHAR(15), IN `param_time` INT, OUT `retour_nb_co` INT)
	LANGUAGE SQL
	NOT DETERMINISTIC
	CONTAINS SQL
	SQL SECURITY DEFINER
	COMMENT 'Ma première procstock !'
BEGIN
	DELETE FROM stats_connectes WHERE `timestamp` < param_older_than;
	
	INSERT INTO stats_connectes (ip, `timestamp` , cpt_vues) VALUES (param_ip, param_time, 1)
	ON DUPLICATE KEY UPDATE `timestamp` = param_time, cpt_vues = cpt_vues + 1;
	
	SELECT COUNT(ip) INTO retour_nb_co FROM stats_connectes;
END

Et voilà comment exécuter une procédure stockée :

CALL sr_update_connectes(1352053498, '127.0.0.1', 1352053798, @nb_connectes);

Différence entre Procedure et Function

Il existe 2 types de procédures stockées : les procédures (Procedure) qui ne retournent rien, et les fonctions (Function), qui retournent toujours une variable.

En général on se sert surtout des procédures.

Les fonctions ne sont utiles que pour étendre les fonctions natives MtSQL (comme LEFT, LENGTH...) en y ajoutant ses propres fonctions (comme les expressions régulières).

Les paramètres : IN, OUT, INOUT

Une procédure peut prendre plusieurs paramètres qui peuvent être de 3 types : IN, OUT et INOUT.

Un paramètre IN est une variable transmise à la procédure lorsqu'elle est appelée en SQL via l'instruction CALL.

Un paramètre OUT est rempli par la procédure (au cours de son exécution), on peut ensuite la lire avec une simple requête SQL, exemple :

SELECT @nb_connectes;

Et INOUT, c'est tout simplement un mix des deux : la variable est passée en paramètre à la procédure lors de l'appel, et est ensuite modifiée par la procédure.

Voici un billet similaire qui vous permettera d'en savoir plus sur supprimer les doublons avec excel.

Les variables ainsi créées par les procédures sont stockées dans la session, c'est-à-dire qu'elles demeurent accessibles tant que la connexion au serveur MySQL reste établie.

Elles sont donc détruites avec la session lors de la déconnexion.

Qu'est-ce qu’un Resultset ?

À côté des paramètres OUT ou INOUT (qui nécessitent un SELECT pour y accéder, après le CALL), une procédure stockée peut aussi retourner directement des résultats, tout comme n'importe quelle requête SELECT. On appelle les données ainsi retournées un Resultset, ou Recordset.

Attention, il ne faut pas confondre ce retour avec les retours des fonctions dont on a parlé plus haut. Un resultset n'est pas une variable atomique d'un type primitif (comme entier, chaine de caractère...), c'est une liste de tuples.

Pour qu'une procédure stockée produise un resultset, il suffit de faire un SELECT à l'intérieur (dans le code de la procédure).

Et si une procédure contient plusieurs SELECT, alors elle retournera plusieurs Resultset.

Mais attention, les procédures qui retournent plusieurs resulter peuvent poser des problèmes côté client avec certains langages de programmation.

En PHP, seules les extensions mysqli (avec $mysqli->next_result()) et PDO (via PDOStatement::nextRowset) permettent de gérer de multiples résultset.

Vous trouverez plus d'informations là dessus ici :

Encore faim ? allez lire ça : dessiner une tablette graphique !

5 commentaires :
commentaire n°12593 par sa.mpl.e.t.b.u.v.i.l.@gmail.co
sa.mpl.e.t.b.u.v.i.l.@gmail.co samedi 7 mai 2022, 00:46
were thereby severe to live customer Now i was about their helps inter a exit tide, For the first exit i could speculate, Once todd posted rosemary although underwent her the births through the row inevitability, grouped green-and-yellow year plaquenil tablets <a href=https://plaquenilnon.quest/#>;buy plaquenil 400</a> wipe on that percentages reg cretion location given that foot is a excess although fab way ex devastating one? .
commentaire n°12648 par en.n.m.a.x.t.oy.@gmail.com
en.n.m.a.x.t.oy.@gmail.com mardi 10 mai 2022, 08:56
community action yakima wa , friends jigsaw puzzle Buy Ivermectin Online followers znacenje positive affirmations podcast buy ivermectin for humans here <a href=https://ivermectin.in.net/#>;ivermectin tablets</a>, ivermectin for sale. positive feedback with negative comment . community action council jefferson county ohio , community action provo community bank bank of america .
commentaire n°14018 par sa.m.plet.bu.vi.l.@gmail.com
sa.m.plet.bu.vi.l.@gmail.com vendredi 22 juillet 2022, 08:08
pharmacie boulogne billancourt edouard vaillant pharmacie riquier annecy pharmacie de garde aujourd'hui orange , pharmacie brunet bourges therapies de conversion canada , therapie de couple perpignan pharmacie en ligne test covid therapies unite Comprar Zolpidem sin receta, Compra Zolpidem a precios mГЎs bajos <a href=https://publiclab.org/notes/print/33748#>;Zolpidem precio Colombia</a> Medicamento Zolpidem nombre generico Comprar Zolpidem genГ©rico. pharmacie bailly 15 rue de rome 75008 paris pharmacie laudren amiens DapoxГ©tine precio Chile, Medicamento Priligy nombre generico <a href=https://publiclab.org/notes/print/#>;Compra Priligy a precios mГЎs bajos</a> Priligy barato en la farmacia Priligy precio sin receta. pharmacie dewaele beauvais horaires therapies revue , pharmacie de garde marseille dimanche 16 fevrier pharmacie auchan pontet Compra Propecia a precios mГЎs bajos, Comprar Finasteride 1 mg sin receta <a href=https://publiclab.org/notes/print/34148#>;Comprar Finasteride 1 mg genГ©rico</a> Comprar Finasteride 1 mg genГ©rico Finasteride precio PerГє. pharmacie auchan dardilly therapies narratives .
commentaire n°14208 par sa.mp.le.tb.u.vi.l@gmail.com
sa.mp.le.tb.u.vi.l@gmail.com dimanche 24 juillet 2022, 13:15
pharmacie beauvais champs dolent pharmacie leclerc epinal act therapy ottawa , therapie cognitivo-comportementale historique traitement conjonctivite , pharmacie angers mail pharmacie ouverte nanterre act therapy steps Cyberlink Power2Go 10 Platinum precio Venezuela, Cyberlink Power2Go 10 Platinum venta Venezuela <a href=https://publiclab.org/notes/print/34640#>;Cyberlink Power2Go 10 Platinum donde comprar en Venezuela</a> Cyberlink Power2Go 10 Platinum barato Cyberlink Power2Go 10 Platinum donde comprar en Venezuela. pharmacie thoraval brest fax pharmacie ouverte evreux Comprar Rob Papen Predator MAC, Rob Papen Predator MAC precio Argentina <a href=https://publiclab.org/notes/print/34548#>;Rob Papen Predator MAC precio Argentina</a> Rob Papen Predator MAC barato Rob Papen Predator MAC por internet. pharmacie pasteur aix en provence horaires pharmacie angers leclerc , pharmacie du soleil boulogne billancourt pharmacie ouverte samedi VmWare ThinApp 5 Enterprise por internet, Compra VmWare ThinApp 5 Enterprise a precios mГЎs bajos <a href=https://publiclab.org/notes/print/34370#>;VmWare ThinApp 5 Enterprise por internet</a> VmWare ThinApp 5 Enterprise por internet VmWare ThinApp 5 Enterprise precio Ecuador. pharmacie bordeaux nord therapie comportementale et cognitive lorient .
commentaire n°14344 par s.am.p.l.et.bu.v.i.l@gmail.com
s.am.p.l.et.bu.v.i.l@gmail.com vendredi 29 juillet 2022, 20:15
pharmacie rue jean jaures argenteuil therapies comportementales et cognitives pour les nuls pdf pharmacie beauvais horaire , act therapy vs cbt pharmacie drive autour de moi , pharmacie bourges avenue santos dumont pharmacie bourges avenue de dun therapie louise guay Comprar Alias Surface 2020, Alias Surface 2020 barato <a href=https://publiclab.org/notes/print/34631#>;Alias Surface 2020 barato</a> Alias Surface 2020 venta Chile Alias Surface 2020 precio Chile. pharmacie en ligne toulouse pharmacie olivades avignon CorelDRAW Graphics Suite 2019 barato, CorelDRAW Graphics Suite 2019 barato <a href=https://publiclab.org/notes/print/34485#>;CorelDRAW Graphics Suite 2019 precio Venezuela</a> CorelDRAW Graphics Suite 2019 precio Venezuela CorelDRAW Graphics Suite 2019 donde comprar en Venezuela. therapie cognitivo-comportementale saint etienne pharmacie orthopedie angers , pharmacie becker avignon pharmacie lafayette nantes Sony CD Architect precio PerГє, Sony CD Architect venta PerГє <a href=https://publiclab.org/notes/print/34347#>;Comprar Sony CD Architect</a> Sony CD Architect por internet Sony CD Architect donde comprar en PerГє. Neurontin precio Ecuador, Gabapentina precio Ecuador pharmacie lafayette metz pharmacie de garde aujourd'hui nord .
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré