Abaixo estão duas opções para retornar uma lista completa de procedimentos armazenados no MySQL.
O SHOW PROCEDURE STATUS Comando
A maneira mais rápida de listar todos os procedimentos armazenados é usar o
SHOW PROCEDURE STATUS comando. Basta executar o seguinte para listar todos os procedimentos armazenados:
SHOW PROCEDURE STATUS; A sintaxe fica assim:
SHOW PROCEDURE STATUS
[LIKE 'pattern' | WHERE expr] Então você pode usar um
LIKE ou WHERE cláusula para restringir os resultados. Exemplo:
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 | example@sqldat.com | 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 | example@sqldat.com | 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 | example@sqldat.com | 2021-11-13 13:03:48 | 2021-11-13 13:03:48 | DEFINER | | utf8mb4 | utf8mb4_0900_ai_ci | utf8mb4_0900_ai_ci | +-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
O information_schema.routines Tabela
Outra maneira de obter uma lista de procedimentos armazenados no MySQL é consultar o
information_schema.routines tabela. Exemplo:
SELECT
routine_schema as "Database",
routine_name
FROM
information_schema.routines
WHERE
routine_type = 'PROCEDURE'
ORDER BY
routine_schema ASC,
routine_name ASC; Esta tabela também armazena informações sobre funções armazenadas. No exemplo acima, excluí aqueles usando um
WHERE cláusula para retornar apenas procedimentos armazenados (ou seja, objetos com um routine_type de PROCEDURE ). Para incluir funções armazenadas, podemos remover o
WHERE cláusula:SELECT
routine_schema as "Database",
routine_name,
routine_type
FROM
information_schema.routines
ORDER BY
routine_schema ASC,
routine_name ASC; Neste caso eu também adicionei o
routine_type coluna para que possamos distinguir entre os procedimentos e funções. Também podemos excluir determinados bancos de dados do 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; Aqui está o que isso retorna no meu ambiente de teste:
+----------+------------------------+--------------+ | Database | ROUTINE_NAME | ROUTINE_TYPE | +----------+------------------------+--------------+ | Music | spAlbumsByGenre | PROCEDURE | | Music | spAlbumsFromArtistId | PROCEDURE | | Music | spAlbumsFromArtistName | PROCEDURE | | Music | spArtistFromId | PROCEDURE | | PetHotel | spGetAllPets | PROCEDURE | | PetHotel | spGetPetById | PROCEDURE | +----------+------------------------+--------------+
Também podemos reduzi-lo a um banco de dados específico:
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 | +----------+------------------------+--------------+