2009-12-28 6 views

Répondre

82
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. Échangez PROCEDURE pour FUNCTION pour une fonction stockée.

+0

Je reçois '# 1064 - Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de '' à la ligne 1' –

+0

+1 Cela m'a aidé trois fois maintenant. Un de ces jours, je me souviendrai du commandement par cœur. –

+1

MONTRER FONCTION FONCTION a fait ma journée. Merci. – rikpg

8
SHOW CREATE PROCEDURE proc_name; 

renvoie la définition de proc_name

4

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' 
32

Vous pouvez utiliser ceci:

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

Malheureusement, le ROUTINE_DEFINITION n'inclut pas les paramètres IN/OUT de la procédure stockée ni les valeurs de retour (alors que SHOW CREATE PROCEDURE le fait). Si vous voulez les obtenir, vous pouvez interroger directement mysql.proc, par exemple. SELECT param_list, retourne, body FROM mysql.proc O WH db = 'yourdb' ET type = 'PROCEDURE' et name = 'nom de procédure'; – GregW

+0

@GregW cette requête de 'mysql.proc' retourne des blobs pour' param_list', 'returns', et' body' ... Je suis incapable de les lire ... Comment l'as-tu fait? – Dmitry

+0

nvm, réponse trouvée [ici] (http: // stackoverflow.com/questions/948174/how-do-i-convert-from-blob-to-text-in-mysql) – Dmitry

7

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

-2

parfait, essayez:

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

Bienvenue à SE! S'il vous plaît expliquer votre réponse, surtout en ce qui concerne ce qui le différencie des autres existants. – anderas

0

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 sera exporter les descriptions de table, mais pas de données. Fonctionne bien pour renifler des schémas inconnus ou oubliés ...;)