web-dev-qa-db-fra.com

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

Quelle est la commande MySQL pour afficher la définition d'une procédure stockée ou d'une fonction, 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 procédure unique.

61
Srinivas M.V.
SHOW CREATE PROCEDURE <name>

Renvoie le texte d'une procédure stockée précédemment définie créée à l'aide de l'instruction CREATE PROCEDURE. Permutez PROCEDURE pour FUNCTION pour une fonction stockée.

95
afftee

Vous pouvez utiliser ceci:

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

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éfinisseurs Ensuite, vous pouvez exécuter le show create procedure <procedurename>;

8
Sibashish Pujari
SHOW CREATE PROCEDURE proc_name;

renvoie la définition de proc_name

8
valli

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'
5
Michel

Une solution alternative rapide et astucieuse si vous souhaitez obtenir une vue d'ensemble de tous les produits existants ou si vous souhaitez uniquement obtenir l'en-tête de procédure indiqué par SHOW CREATE PROCEDURE:

mysqldump --user=<user> -p --no-data --routines <database>

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

1
ISparkes

Vous pouvez utiliser la table proc dans la base de données mysql :

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

Notez que vous devez avoir une autorisation pour sélectionner mysql.proc:

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