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.
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.
Vous pouvez utiliser ceci:
SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
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>;
SHOW CREATE PROCEDURE proc_name;
renvoie la définition de proc_name
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 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 ...;)
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' ;