sql >> Base de Datos >  >> RDS >> MariaDB

2 formas de enumerar todas las funciones en MariaDB

A continuación hay dos opciones para devolver una lista de funciones en MariaDB.

El SHOW FUNCTION STATUS Comando

La forma más rápida de enumerar todas las funciones es usar SHOW FUNCTION STATUS comando.

Simplemente ejecute lo siguiente para enumerar todas las funciones:

SHOW FUNCTION STATUS;

La sintaxis es así:

SHOW FUNCTION STATUS
    [LIKE 'pattern' | WHERE expr]

Entonces puedes usar un LIKE o WHERE cláusula para reducir los resultados.

Ejemplo:

SHOW FUNCTION STATUS LIKE '%customer%';

Resultado de ejemplo:

+--------+----------------------------+----------+------------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| 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 el WHERE cláusula para filtrar los resultados por las columnas. Por ejemplo, podemos filtrar los resultados a una base de datos dada:

SHOW FUNCTION STATUS WHERE db = 'music';

Resultado de ejemplo:

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

El SHOW FUNCTION STATUS El comando funciona de forma muy parecida a SHOW PROCEDURE STATUS comando, que devuelve una lista de procedimientos almacenados.

Las information_schema.routines Mesa

Otra forma de obtener una lista de funciones en MariaDB es consultar el information_schema.routines mesa.

Ejemplo:

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

Resultado de ejemplo:

+----------+----------------------------+
| Database | routine_name               |
+----------+----------------------------+
| music    | test                       |
| sakila   | get_customer_balance       |
| sakila   | inventory_held_by_customer |
| sakila   | inventory_in_stock         |
+----------+----------------------------+

Esta tabla también almacena información sobre procedimientos almacenados. En el ejemplo anterior, los excluí usando un WHERE cláusula para devolver solo funciones (es decir, objetos con un routine_type de FUNCTION ).

Para incluir procedimientos almacenados, 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 reducirlo a una base de datos específica:

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