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


Réponses:


743
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;

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.


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 

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'

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

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


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)

Les commentaires sont également utiles.
dolmen


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

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

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)), '%'));

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'

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

1
                           show procedure status;

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


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

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

-2

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

select * from sysobjects 
where type='p'
order by crdate desc
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.