Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

2 maneiras de listar todos os procedimentos armazenados no MySQL


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 | [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 |
+-------+------------------------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

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    |
+----------+------------------------+--------------+