Comment exécuter une requête dynamique dans une procédure MySQL
Publié le 17 Mai 2011
Lorsqu'on commence à écrire des procédures MySQL un peu complexe on arrive (dans mon cas au moins) à devoir générer une requête dynamiquement puis à l'exécuter.
Pour la générer rien de très compliquer: il faut générer une String ... euh pardon un VARCHAR qui contient la requête à exécuter.
Jusque là j'arrive à m'en sortir avec des CONCAT et des SELECT.
Par contre pour l'exécution pas moyen de bricoler, il faut connaître la recette, donc voici un exemple:
DECLARE my_query VARCHAR(255);
-- ici on aurait pu utiliser des CONCAT et SELECT pour construire une requête un peu plus complexe
my_query = "INSERT INTO my_table values (1, 'ma_cle', 'ma_valeur')";
SET @sqlstatement = my_query;
PREPARE sqlquery FROM @sqlstatement;
EXECUTE sqlquery;
DEALLOCATE PREPARE sqlquery;
Plus d'info ici: http://dev.mysql.com/doc/refman/5.0/fr/sqlps.html