SHOW FUNCTIONS

MySQL proporciona varias formas de listar y obtener información sobre las funciones almacenadas en una base de datos.

SHOW FUNCTION STATUS

-- Listar todas las funciones de la base de datos actual
SHOW FUNCTION STATUS WHERE Db = 'tienda_mysql';
DbNameTypeDefinerModifiedCreatedSecurity_type
tienda_mysqlfn_precio_con_ivaFUNCTIONroot@localhost......DEFINER
tienda_mysqlfn_nivel_stockFUNCTIONroot@localhost......DEFINER

Filtrar con LIKE

-- Funciones que empiezan con fn_
SHOW FUNCTION STATUS WHERE Db = 'tienda_mysql' AND Name LIKE 'fn_%';
-- Funciones creadas por un usuario específico
SHOW FUNCTION STATUS WHERE Definer = 'root@localhost';

SHOW CREATE FUNCTION

Muestra la sentencia CREATE completa de una función:

SHOW CREATE FUNCTION fn_precio_con_iva\G

Resultado:

Function: fn_precio_con_iva
sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,...
Create Function: CREATE FUNCTION `fn_precio_con_iva`(precio DECIMAL(10,2))
    RETURNS decimal(10,2)
    DETERMINISTIC
BEGIN
    RETURN ROUND(precio * 1.21, 2);
END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci

Consultar information_schema

La tabla information_schema.ROUTINES contiene información detallada:

SELECT
    ROUTINE_NAME AS nombre,
    ROUTINE_TYPE AS tipo,
    DATA_TYPE AS tipo_retorno,
    DTD_IDENTIFIER AS retorno_detalle,
    IS_DETERMINISTIC AS determinista,
    SQL_DATA_ACCESS AS acceso_datos,
    SECURITY_TYPE AS seguridad,
    CREATED AS creada
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'tienda_mysql'
AND ROUTINE_TYPE = 'FUNCTION';
nombretipotipo_retornodeterministaacceso_datosseguridad
fn_precio_con_ivaFUNCTIONdecimalYESCONTAINS SQLDEFINER
fn_nivel_stockFUNCTIONvarcharYESCONTAINS SQLDEFINER

Ver parámetros de una función

SELECT
    PARAMETER_NAME AS parametro,
    DATA_TYPE AS tipo,
    PARAMETER_MODE AS modo,
    ORDINAL_POSITION AS posicion
FROM information_schema.PARAMETERS
WHERE SPECIFIC_SCHEMA = 'tienda_mysql'
AND SPECIFIC_NAME = 'fn_descuento'
AND PARAMETER_MODE IS NOT NULL
ORDER BY ORDINAL_POSITION;
parametrotipomodoposicion
preciodecimalIN1
porcentajeintIN2

Contar funciones

SELECT COUNT(*) AS total_funciones
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'tienda_mysql'
AND ROUTINE_TYPE = 'FUNCTION';

Funciones vs procedimientos

SELECT ROUTINE_TYPE AS tipo, COUNT(*) AS total
FROM information_schema.ROUTINES
WHERE ROUTINE_SCHEMA = 'tienda_mysql'
GROUP BY ROUTINE_TYPE;
tipototal
FUNCTION6
PROCEDURE12

En el siguiente artículo veremos cómo eliminar funciones con DROP FUNCTION.

Escrito por Eduardo Lázaro