Mysql
 sql >> Base de données >  >> RDS >> Mysql

2 façons de lister toutes les procédures stockées dans MySQL

Vous trouverez ci-dessous deux options pour renvoyer une liste complète des procédures stockées dans MySQL.

Le SHOW PROCEDURE STATUS Commande

Le moyen le plus rapide de répertorier toutes les procédures stockées consiste à utiliser le SHOW PROCEDURE STATUS commande.

Exécutez simplement ce qui suit pour répertorier toutes les procédures stockées :

SHOW PROCEDURE STATUS;

La syntaxe ressemble à ceci :

SHOW PROCEDURE STATUS
    [LIKE 'pattern' | WHERE expr]

Vous pouvez donc utiliser un LIKE ou WHERE clause pour affiner les résultats.

Exemple :

SHOW PROCEDURE STATUS LIKE 'albums%';

Résultat :

+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db    | Name                   | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Music | spAlbumsByGenre        | PROCEDURE | [email protected] | 2021-11-13 13:09:26 | 2021-11-13 13:09:26 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
| Music | spAlbumsFromArtistId   | PROCEDURE | [email protected] | 2021-11-13 13:03:25 | 2021-11-13 13:03:25 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
| Music | spAlbumsFromArtistName | PROCEDURE | [email protected] | 2021-11-13 13:03:48 | 2021-11-13 13:03:48 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

Les information_schema.routines Tableau

Une autre façon d'obtenir une liste des procédures stockées dans MySQL est d'interroger le information_schema.routines tableau.

Exemple :

SELECT 
    routine_schema as "Database",
    routine_name
FROM 
    information_schema.routines
WHERE 
    routine_type = 'PROCEDURE'
ORDER BY 
    routine_schema ASC, 
    routine_name ASC;

Cette table stocke également des informations sur les fonctions stockées. Dans l'exemple ci-dessus, j'ai exclu ceux en utilisant un WHERE clause pour renvoyer uniquement les procédures stockées (c'est-à-dire les objets avec un routine_type de PROCEDURE ).

Pour inclure les fonctions stockées, nous pouvons supprimer le WHERE clause :

SELECT 
    routine_schema as "Database",
    routine_name,
    routine_type
FROM 
    information_schema.routines
ORDER BY 
    routine_schema ASC, 
    routine_name ASC;

Dans ce cas, j'ai également ajouté le routine_type colonne afin que nous puissions faire la distinction entre les procédures et les fonctions.

Nous pouvons également exclure certaines bases de données du résultat :

SELECT 
    routine_schema as "Database",
    routine_name,
    routine_type
FROM 
    information_schema.routines
WHERE 
    routine_schema NOT IN ('sys', 'information_schema', 'mysql', 'performance_schema')
ORDER BY 
    routine_schema ASC, 
    routine_name ASC;

Voici ce que cela renvoie dans mon environnement de test :

+----------+------------------------+--------------+
| Database | ROUTINE_NAME           | ROUTINE_TYPE |
+----------+------------------------+--------------+
| Music    | spAlbumsByGenre        | PROCEDURE    |
| Music    | spAlbumsFromArtistId   | PROCEDURE    |
| Music    | spAlbumsFromArtistName | PROCEDURE    |
| Music    | spArtistFromId         | PROCEDURE    |
| PetHotel | spGetAllPets           | PROCEDURE    |
| PetHotel | spGetPetById           | PROCEDURE    |
+----------+------------------------+--------------+

Nous pouvons également le réduire à une base de données spécifique :

SELECT 
    routine_schema as "Database",
    routine_name,
    routine_type
FROM 
    information_schema.routines
WHERE 
    routine_schema = 'music'
ORDER BY 
    routine_name ASC;

Résultat :

+----------+------------------------+--------------+
| Database | ROUTINE_NAME           | ROUTINE_TYPE |
+----------+------------------------+--------------+
| Music    | spAlbumsByGenre        | PROCEDURE    |
| Music    | spAlbumsFromArtistId   | PROCEDURE    |
| Music    | spAlbumsFromArtistName | PROCEDURE    |
| Music    | spArtistFromId         | PROCEDURE    |
+----------+------------------------+--------------+