2009-04-09 11 views

Répondre

629
SHOW PROCEDURE STATUS; 
SHOW FUNCTION STATUS; 
+1

Existe-t-il un moyen de trouver le nom de la procédure stockée actuelle? Je crois que c'est 'object_name (@@ procid)' dans SSMS quelque chose comme ça dans MySQL? – xameeramir

+0

Si l'utilisateur a le privilège de 'EXECUTE', sinon, cela affichera une liste vide. – mjb

183
show procedure status 

vous montrera les procédures stockées.

show create procedure MY_PROC 

vous montrera la définition d'une procédure. Et

help show 

vous montrera toutes les options disponibles pour la commande show.

+3

aide montrent ne fonctionne pas. – Codler

+1

Comme Codler l'a fait remarquer, help show ne fonctionne pas car l'aide est une instruction de ligne de commande mysql. Pour obtenir plus d'informations sur la commande SHOW, rendez-vous directement sur la page de documentation de MySQL: http://dev.mysql.com/doc/refman/5.1/fr/show.html – IvanD

+2

Eh bien, je ne sais pas pourquoi vous dites ça, help show fonctionne très bien pour moi en utilisant MySQL 5.0.95 sur centos 6.3 – h4unt3r

13

utiliser ceci:

SHOW PROCEDURE STATUS; 
24

Comme mentionné ci-dessus,

show procedure status; 

va en effet afficher une liste des procédures, mais montre tous d'entre eux, tout le serveur.

Si vous voulez voir seulement ceux dans une base de données unique, essayez ceci:

SHOW PROCEDURE STATUS WHERE Db = 'databasename'; 
+0

cela fonctionne bien pour moi ...! –

+0

De même, SHOW FONCTION STATUS WHERE Db = 'nom_base_de_données'; vous donne les fonctions. –

36

Une façon plus spécifique:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE' 
+1

ça va fonctionner sans utiliser AND Type = 'PROCEDURE' aussi, – normalUser

71

Pour la procédure de vue en nom sage

select name from mysql.proc 

ci-dessous le code utilisé pour lister toute la procédure et le code ci-dessous donne le même résultat que l'état de la procédure d'affichage

select * from mysql.proc 
+3

+1 pour montrer le nom seulement! –

+1

c'est une présentation beaucoup plus propre que les autres surtout si vous êtes dans un petit terminal. Merci. – user1527227

7

Pour montrer à la vôtre:

SELECT 
    db, type, specific_name, param_list, returns 
FROM 
    mysql.proc 
WHERE 
    definer LIKE 
    CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%')); 
+0

Pourquoi modifier en majuscules? Est-ce une convention? –

+3

Il est courant de placer des mots-clés SQL en majuscules, tout en mettant les noms de colonnes, les noms de tables, etc. en minuscules. – Sagar

20

Alternative:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES 
0
      show procedure status; 

en utilisant cette commande, vous pouvez voir les toutes les procédures dans les bases de données

7

Une variation sur des années Praveenkumar_V post:

SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'PROCEDURE'; 
SELECT `name` FROM mysql.proc WHERE db = 'dbname' AND `type` = 'FUNCTION'; 

..et cela parce que je avais besoin de gagner du temps après un entretien:

SELECT CONCAT(
    "GRANT EXECUTE ON PROCEDURE `" 
    ,`name` 
    ,"` TO [email protected]'%'; -- " 
    ,`comment` 
) 
FROM mysql.proc 
WHERE db = 'dbname' 
AND `type` = 'PROCEDURE'; 

SELECT CONCAT(
    "GRANT EXECUTE ON FUNCTION `" 
    ,`name` 
    ,"` TO [email protected]'%'; -- " 
    ,`comment` 
) 
FROM mysql.proc 
WHERE db = 'dbname' 
AND `type` = 'FUNCTION'; 
6
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name' 
-3

Utilisez la requête suivante pour toutes les procédures:

select * from sysobjects 
where type='p' 
order by crdate desc 
15

Ma préférence est pour quelque chose qui:

  1. Répertorie les fonctions et les procédures,
  2. Permet de savoir lesquelles sont,
  3. Donne les noms et les types et rien d'autre,
  4. Filtres résultats par la base de données actuelle, pas le définisseur actuel
  5. Trie le résultat

cousent des autres réponses des procédures en ce fil, je me retrouve avec

select 
    name, type 
from 
    mysql.proc 
where 
    db = database() 
order by 
    type, name; 

... qui finit avec des résultats qui ressemblent ike ceci:

mysql> select name, type from mysql.proc where db = database() order by type, name; 
+------------------------------+-----------+ 
| name       | type  | 
+------------------------------+-----------+ 
| get_oldest_to_scan   | FUNCTION | 
| get_language_prevalence  | PROCEDURE | 
| get_top_repos_by_user  | PROCEDURE | 
| get_user_language_prevalence | PROCEDURE | 
+------------------------------+-----------+ 
4 rows in set (0.30 sec) 
+0

Réponse parfaite, merci! –

2

Si vous voulez la liste Procédure Store pour la base sélectionnée actuelle,

SHOW PROCEDURE STATUS WHERE Db = DATABASE(); 

il liste Routines basé sur la base de données actuellement sélectionné

0
SHOW PROCEDURE STATUS; 

Affiche tous les procédures stockées.

SHOW FUNCTION STATUS; 

affiche toutes les fonctions.

SHOW CREATE PROCEDURE [PROC_NAME]; 

montrera la définition de la procédure spécifiée.

SHOW PROCEDURE STATUS WHERE Db = '[db_name]'; 

vous montrera toutes les procédures de la base de données.

Questions connexes