Las funciones almacenadas en MySQL permiten encapsular código SQL en un bloque reutilizable que devuelve un único valor. Se pueden usar en consultas SELECT
y dentro de otros procedimientos.
✅ Devuelven un solo valor con RETURN
.
✅ Se pueden usar en consultas SQL (SELECT
, WHERE
, etc.).
✅ Deben ser determinísticas o no determinísticas.
✅ No pueden modificar datos (no pueden ejecutar INSERT
, UPDATE
, DELETE
).
La sintaxis básica de una función en MySQL es:
DELIMITER $$
CREATE FUNCTION nombre_funcion(parametros) RETURNS tipo_de_dato
DETERMINISTIC
BEGIN
DECLARE variable_local tipo_de_dato;
-- Operaciones y asignación de valores
RETURN valor;
END $$
DELIMITER ;
🔹 RETURNS tipo_de_dato
→ Define el tipo de valor que devuelve la función (INT
, VARCHAR
, DECIMAL
, etc.).
🔹 DETERMINISTIC
→ Indica que para los mismos valores de entrada, la función siempre devuelve el mismo resultado.
🔹 RETURN valor
→ Devuelve el resultado de la función.
DELIMITER $$
CREATE FUNCTION ObtenerTotalPedidos(id_cliente INT) RETURNS INT
DETERMINISTIC
BEGIN
DECLARE total INT;
SELECT COUNT(*) INTO total FROM pedidos WHERE pedidos.id_cliente = id_cliente;
RETURN total;
END $$
DELIMITER ;
📌 Uso de la función en una consulta
SELECT ObtenerTotalPedidos(2) AS total_pedidos;
🔹 La función devuelve la cantidad de pedidos de un cliente específico.
DELIMITER $$
CREATE FUNCTION CalcularDescuento(precio DECIMAL(10,2), descuento INT) RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
RETURN precio - (precio * descuento / 100);
END $$
DELIMITER ;
📌 Uso de la función en una consulta
SELECT CalcularDescuento(100, 10) AS precio_final;
🔹 La función aplica un descuento del 10% a un producto de $100.
SELECT id_producto, nombre, CalcularDescuento(precio, 15) AS precio_con_descuento
FROM productos;
🔹 Aplica la función CalcularDescuento
a todos los productos.
🔹 Ver funciones en MySQL
SHOW FUNCTION STATUS WHERE Db = 'nombre_base_de_datos';
🔹 Modificar una función (requiere eliminar y volver a crear)
DROP FUNCTION IF EXISTS ObtenerTotalPedidos;
🔹 Eliminar una función
DROP FUNCTION CalcularDescuento;
Característica | Función (FUNCTION ) |
Procedimiento (PROCEDURE ) |
---|---|---|
Devuelve un valor | ✅ Sí (RETURN ) |
❌ No necesariamente |
Se usa en consultas (SELECT ) |
✅ Sí | ❌ No |
Puede modificar datos (INSERT , UPDATE , etc.) |
❌ No | ✅ Sí |
Puede tener múltiples valores de salida | ❌ No | ✅ Sí (OUT ) |
✅ Usa DETERMINISTIC
si la función siempre devuelve el mismo resultado para los mismos datos de entrada.
✅ No uses INSERT
, UPDATE
, DELETE
dentro de una función.
✅ Usa nombres descriptivos para que sea fácil de entender su propósito.
✅ Verifica que el usuario tenga permisos con GRANT EXECUTE ON FUNCTION nombre_funcion TO 'usuario'@'localhost';
.