MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

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


Abaixo estão duas opções para retornar uma lista de funções no MariaDB.

O SHOW FUNCTION STATUS Comando


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

Basta executar 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 '%customer%';

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-13 07:26:47 | 2021-11-13 07:26:47 | DEFINER       |         | utf8mb4              | utf8mb4_general_ci   | utf8mb4_general_ci |
| sakila | inventory_held_by_customer | FUNCTION | [email protected] | 2021-11-13 07:26:47 | 2021-11-13 07:26:47 | DEFINER       |         | utf8mb4              | utf8mb4_general_ci   | utf8mb4_general_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 = 'music';

Exemplo de resultado:
+-------+------+----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db    | Name | Type     | Definer          | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+-------+------+----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| music | test | FUNCTION | [email protected] | 2021-11-27 09:46:25 | 2021-11-27 09:46:25 | DEFINER       |         | utf8                 | utf8_general_ci      | utf8mb4_general_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 MariaDB é 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;

Exemplo de resultado:
+----------+----------------------------+
| Database | routine_name               |
+----------+----------------------------+
| music    | test                       |
| sakila   | get_customer_balance       |
| sakila   | inventory_held_by_customer |
| sakila   | inventory_in_stock         |
+----------+----------------------------+

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 = 'sakila'
ORDER BY 
    routine_name ASC;

Resultado:
+----------+----------------------------+--------------+
| Database | routine_name               | routine_type |
+----------+----------------------------+--------------+
| sakila   | film_in_stock              | PROCEDURE    |
| sakila   | film_not_in_stock          | PROCEDURE    |
| sakila   | get_customer_balance       | FUNCTION     |
| sakila   | inventory_held_by_customer | FUNCTION     |
| sakila   | inventory_in_stock         | FUNCTION     |
| sakila   | rewards_report             | PROCEDURE    |
+----------+----------------------------+--------------+