Question

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

Je sais que SHOW PROCEDURE STATUS affichera la liste des procédures disponibles. Je dois voir la définition d'une procédure unique.

Était-ce utile?

La solution

SHOW CREATE PROCEDURE <name>

Renvoie le texte d'une procédure stockée précédemment définie qui a été créée en utilisant l'instruction CREATE PROCEDURE. PROCEDURE Swap pour FUNCTION pour une fonction stockée.

Autres conseils

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 que 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>;

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 rapide et hacky alternative si vous voulez obtenir un aperçu de tous les produres il y a, ou courir sur la question de seulement obtenir l'en-tête de procédure affiché par SHOW CREATE PROCEDURE:

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

Il exportera les descriptions de table ainsi, mais aucune donnée. 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 subvention pour le produit mysql.proc :

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

Parfait, essayez:

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
    WHERE ROUTINE_SCHEMA = 'yourdb' AND ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_NAME = "procedurename";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top