A continuación hay dos opciones para devolver una lista completa de procedimientos almacenados en MySQL.
El SHOW PROCEDURE STATUS
Comando
La forma más rápida de enumerar todos los procedimientos almacenados es usar SHOW PROCEDURE STATUS
comando.
Simplemente ejecute lo siguiente para enumerar todos los procedimientos almacenados:
SHOW PROCEDURE STATUS;
La sintaxis es así:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr]
Entonces puedes usar un LIKE
o WHERE
cláusula para reducir los resultados.
Ejemplo:
SHOW PROCEDURE STATUS LIKE 'albums%';
Resultado:
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+ | 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 | +-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
Las information_schema.routines
Mesa
Otra forma de obtener una lista de procedimientos almacenados en MySQL es consultar information_schema.routines
mesa.
Ejemplo:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC;
Esta tabla también almacena información sobre las funciones almacenadas. En el ejemplo anterior, los excluí usando un WHERE
cláusula para devolver solo procedimientos almacenados (es decir, objetos con un routine_type
de PROCEDURE
).
Para incluir funciones almacenadas podemos eliminar WHERE
cláusula:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC;
En este caso también agregué el routine_type
columna para que podamos distinguir entre los procedimientos y funciones.
También podemos excluir ciertas bases de datos del resultado:
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;
Esto es lo que esto devuelve en mi entorno de prueba:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | | PetHotel | spGetAllPets | PROCEDURE | | PetHotel | spGetPetById | PROCEDURE | +----------+------------------------+--------------+
También podemos reducirlo a una base de datos específica:
SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
WHERE
routine_schema = 'music'
ORDER BY
routine_name ASC;
Resultado:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | +----------+------------------------+--------------+