Liste des procédures / fonctions stockées Ligne de commande Mysql

474

Comment puis-je voir la liste des procédures stockées ou des fonctions stockées dans la ligne de commande mysql comme show tables;ou les show databases;commandes.

défaillance du système
la source

Réponses:

743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
Fredrik
la source
2
Existe-t-il un moyen de trouver le nom actuel de la procédure stockée? Je crois que c'est object_name(@@procid) dans SSMS quelque chose comme ça dans MySql?
Mohammed Zameer
1
Si l'utilisateur a le privilège EXECUTEou sinon, cela affichera une liste vide.
mjb
211
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 showcommande.


la source
1
Comme l'a souligné Codler, help show ne fonctionne pas car help est une instruction de ligne de commande mysql. Pour obtenir plus d'informations sur la commande SHOW, accédez directement à la page de documentation MySQL à l' adresse
IvanD
2
Eh bien, je ne sais pas pourquoi vous dites cela, help show fonctionne bien pour moi en utilisant MySQL 5.0.95 sur centos 6.3
h4unt3r
Cela fonctionne si vous utilisez le client en ligne de commande de mysqls. Je ne le fais pas, donc je préfère la référence en ligne.
Ledhund
C'est la meilleure réponse
Kolob Canyon
87

Pour afficher la procédure dans le nom

select name from mysql.proc 

sous le code utilisé pour lister toute la procédure et sous le code donne le même résultat que le statut de la procédure

select * from mysql.proc 
Praveenkumar_V
la source
4
c'est une présentation beaucoup plus propre que les autres, surtout si vous êtes dans un petit terminal. Merci.
user1527227
J'ai développé cette réponse select db,name,type from mysql.proc where db<>'sys';pour un peu plus d'informations et moins de kruft système intégré.
pbnelson
47

Une manière plus spécifique:

SHOW PROCEDURE STATUS 
WHERE Db = DATABASE() AND Type = 'PROCEDURE'
sassman
la source
4
cela fonctionnera sans utiliser AND Type = 'PROCEDURE' également,
normalUser
33

Comme mentionné ci-dessus,

show procedure status;

Affiche en effet une liste de procédures, mais les affiche toutes , à l'échelle du serveur.

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

SHOW PROCEDURE STATUS WHERE Db = 'databasename';
Drarok
la source
De même, AFFICHER L'ÉTAT DE LA FONCTION OERE Db = 'nom de la base de données'; vous donne les fonctions.
David A. Gray
29

Alternative:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES
macio.Jun
la source
21

Ma préférence va à quelque chose qui:

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

Assemblant d'autres réponses dans ce fil, je me retrouve avec

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

... ce qui vous donne des résultats qui ressemblent à 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)
John Haugeland
la source
Les commentaires sont également utiles.
dolmen
15

utilisez ceci:

SHOW PROCEDURE STATUS;
Code L ღ ver
la source
11

Affiche toutes les procédures stockées:

SHOW PROCEDURE STATUS;

Affiche toutes les fonctions:

SHOW FUNCTION STATUS;

Affiche la définition de la procédure spécifiée:

SHOW CREATE PROCEDURE [PROC_NAME];

Vous montre toutes les procédures de la base de données donnée:

SHOW PROCEDURE STATUS WHERE Db = '[db_name]';
Optimiseur
la source
9

Une variation sur le post de Praveenkumar_V:

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 j'avais besoin de gagner du temps après quelques travaux ménagers:

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

SELECT CONCAT(
     "GRANT EXECUTE ON FUNCTION `"
    ,`name`
    ,"` TO username@'%'; -- "
    ,`comment`
)
FROM mysql.proc
WHERE db = 'dbname'
AND `type` = 'FUNCTION';
trapper_hag
la source
8

Pour afficher uniquement le vôtre:

SELECT
  db, type, specific_name, param_list, returns
FROM
  mysql.proc
WHERE
  definer LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'));
Charlie Skilbeck
la source
3
Il est courant de mettre des mots clés SQL dans toutes les majuscules, tout en mettant les noms de colonne, les noms de table, etc. en minuscules.
Sagar
8
SELECT specific_name FROM `information_schema`.`ROUTINES` WHERE routine_schema='database_name'
Sunil Kumar
la source
5

Si vous souhaitez répertorier la procédure de stockage pour la base de données actuellement sélectionnée,

SHOW PROCEDURE STATUS WHERE Db = DATABASE();

il listera les routines basées sur la base de données actuellement sélectionnée

MIS À JOUR pour répertorier les fonctions de votre base de données

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="FUNCTION";

pour répertorier les routines / procédures de stockage dans votre base de données,

select * from information_schema.ROUTINES where ROUTINE_SCHEMA="YOUR DATABASE NAME" and ROUTINE_TYPE="PROCEDURE";

pour lister les tables de votre base de données,

select * from information_schema.TABLES WHERE TABLE_TYPE="BASE TABLE" AND TABLE_SCHEMA="YOUR DATABASE NAME";

pour répertorier les vues dans votre base de données,

méthode 1:

select * from information_schema.TABLES WHERE TABLE_TYPE="VIEW" AND TABLE_SCHEMA="YOUR DATABASE NAME";

méthode 2:

select * from information_schema.VIEWS WHERE TABLE_SCHEMA="YOUR DATABASE NAME";
Mohideen bin Mohammed
la source
1
                           show procedure status;

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

Karan
la source
0

Mon rendu préféré de la liste des procédures de la base de données actuelle: nom, liste des paramètres, commentaire

SELECT specific_name AS name, param_list AS params, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'PROCEDURE';

Ajouter des retours pour les fonctions:

SELECT specific_name AS name, param_list AS params, `returns`, `comment`
FROM mysql.proc
WHERE db = DATABASE()
AND type = 'FUNCTION';
dolmen
la source
0

Répertoriez les procédures et fonctions de l'utilisateur pour toutes les bases de données :

SELECT 
    `ROUTINE_SCHEMA` AS `database`
    ,`ROUTINE_TYPE` AS `type`
    ,`SPECIFIC_NAME` AS `name`
    ,`DTD_IDENTIFIER` AS `data_type`
FROM 
    `INFORMATION_SCHEMA`.`ROUTINES`
WHERE
  `definer` LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
ORDER BY
    `database`
    ,`type`
    ,`name`
;

Répertoriez les procédures et fonctions de l' utilisateur pour la base de données utilisée :

SELECT 
    `ROUTINE_SCHEMA` AS `database`
    ,`ROUTINE_TYPE` AS `type`
    ,`SPECIFIC_NAME` AS `name`
    ,`DTD_IDENTIFIER` AS `data_type`
FROM 
    `INFORMATION_SCHEMA`.`ROUTINES`
WHERE
  `definer` LIKE
  CONCAT('%', CONCAT((SUBSTRING_INDEX((SELECT user()), '@', 1)), '%'))
AND
   `ROUTINE_SCHEMA` = DATABASE()
ORDER BY
    `type`
    ,`name`
;
Jimmix
la source
-2

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

select * from sysobjects 
where type='p'
order by crdate desc
mwesigwa
la source