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

2 maneiras de listar todas as funções no MySQL


Abaixo estão duas opções que podemos usar para retornar uma lista de funções no MySQL.

O SHOW FUNCTION STATUS Comando


A maneira mais rápida de listar todas as funções é usar o SHOW FUNCTION STATUS comando.

Execute o seguinte para listar todas as funções:
SHOW FUNCTION STATUS;

A sintaxe fica assim:
SHOW FUNCTION STATUS
    [LIKE 'pattern' | WHERE expr]

Então você pode usar um LIKE ou WHERE cláusula para restringir os resultados.

Exemplo:
SHOW FUNCTION STATUS LIKE '%test%';

Exemplo de resultado:
+----------+---------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db       | Name          | Type     | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+----------+---------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| PetHotel | test_function | FUNCTION | [email protected] | 2021-11-29 08:09:26 | 2021-11-29 08:09:26 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+----------+---------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

Podemos usar o WHERE cláusula para filtrar os resultados pelas colunas. Por exemplo, podemos filtrar os resultados para um determinado banco de dados:
SHOW FUNCTION STATUS WHERE db = 'sakila';

Exemplo de resultado:
+--------+----------------------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db     | Name                       | Type     | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+--------+----------------------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| sakila | get_customer_balance       | FUNCTION | [email protected] | 2021-11-29 08:04:31 | 2021-11-29 08:04:31 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
| sakila | inventory_held_by_customer | FUNCTION | [email protected] | 2021-11-29 08:04:31 | 2021-11-29 08:04:31 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
| sakila | inventory_in_stock         | FUNCTION | [email protected] | 2021-11-29 08:04:31 | 2021-11-29 08:04:31 | DEFINER       |         | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+--------+----------------------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

O SHOW FUNCTION STATUS O comando funciona muito parecido com o SHOW PROCEDURE STATUS comando, que retorna uma lista de procedimentos armazenados.

O information_schema.routines Tabela


Outra maneira de obter uma lista de funções no MySQL é consultar o information_schema.routines tabela.

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

Essa tabela também armazena informações sobre procedimentos armazenados. No exemplo acima, excluí aqueles usando um WHERE cláusula para retornar apenas funções (ou seja, objetos com um routine_type de FUNCTION ).

Para incluir procedimentos armazenados, 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 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 = 'pethotel'
ORDER BY 
    routine_name ASC;

Resultado da amostra:
+----------+---------------+--------------+
| Database | ROUTINE_NAME  | ROUTINE_TYPE |
+----------+---------------+--------------+
| PetHotel | spGetAllPets  | PROCEDURE    |
| PetHotel | spGetPetById  | PROCEDURE    |
| PetHotel | test_function | FUNCTION     |
+----------+---------------+--------------+