sql >> Base de Datos >  >> RDS >> Mysql

2 formas de enumerar todas las funciones en MySQL

A continuación hay dos opciones que podemos usar para devolver una lista de funciones en MySQL.

El SHOW FUNCTION STATUS Comando

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

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 '%test%';

Resultado de ejemplo:

+----------+---------------+----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| 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 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 = 'sakila';

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

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 MySQL es consultar 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;

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

Resultado de la muestra:

+----------+---------------+--------------+
| Database | ROUTINE_NAME  | ROUTINE_TYPE |
+----------+---------------+--------------+
| PetHotel | spGetAllPets  | PROCEDURE    |
| PetHotel | spGetPetById  | PROCEDURE    |
| PetHotel | test_function | FUNCTION     |
+----------+---------------+--------------+