Afficher la définition de la procédure / fonction stockée dans MySQL

Quelle est la commande MySQL pour afficher la définition d’une procédure ou d’une fonction stockée, similaire à sp_helptext dans Microsoft SQL Server?

Je sais que SHOW PROCEDURE STATUS affichera la liste des procédures disponibles. J’ai besoin de voir la définition d’une seule procédure.

 SHOW CREATE PROCEDURE  

Renvoie le texte d’une procédure stockée précédemment définie qui a été créée à l’aide de l’instruction CREATE PROCEDURE . Échangez PROCEDURE pour la fonction pour une fonction stockée.

Vous pouvez utiliser ceci:

 SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename"; 
 SHOW CREATE PROCEDURE proc_name; 

renvoie la définition de proc_name

Si vous voulez connaître la liste des procédures, vous pouvez exécuter la commande suivante –

 show procedure status; 

Il vous donnera la liste des procédures et leurs définitions Ensuite, vous pouvez exécuter la show create procedure ;

quelque chose comme:

 DELIMITER // CREATE PROCEDURE alluser() BEGIN SELECT * FROM users; END // DELIMITER ; 

que:

 SHOW CREATE PROCEDURE alluser 

donne le résultat:

 'alluser', 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER', 'CREATE DEFINER=`root`@`localhost` PROCEDURE `alluser`() BEGIN SELECT * FROM users; END' 

Une solution alternative rapide et novasortingce si vous voulez avoir une vue d’ensemble de tous les produits qui existent, ou rencontrer le problème de ne recevoir que l’en-tête de procédure affiché par SHOW CREATE PROCEDURE:

 mysqldump --user= -p --no-data --routines  

Il exportera également les descriptions de table, mais pas de données. Fonctionne bien pour renifler autour de schémas inconnus ou oubliés …;)

Vous pouvez utiliser la table proc dans la firebase database mysql :

 mysql> SELECT body FROM mysql.proc WHERE db = 'yourdb' AND name = 'procedurename' ; 

Notez que vous devez avoir une autorisation pour select to mysql.proc :

 mysql> GRANT SELECT ON mysql.proc TO 'youruser'@'yourhost' IDENTIFIED BY 'yourpass' ; 

Parfait, essayez-le:

 SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";