Funciones#
Definición#
Una función en MySQL es un bloque de código almacenado en el servidor que realiza una tarea específica y devuelve un valor. Las funciones son útiles para encapsular lógica que puede ser reutilizada en consultas SQL, mejorando la modularidad y eficiencia del código.
Sintaxis#
La sintaxis básica para definir una función es:
DELIMITER //
CREATE FUNCTION nombre_funcion(parametro1 tipo, parametro2 tipo, ...)
RETURNS tipo_de_dato
DETERMINISTIC
BEGIN
DECLARACIONES;
RETURN valor;
END
// DELIMITER;
Nota
Notas clave:
RETURNS tipo_de_dato
: Especifica el tipo de dato que devuelve la función (por ejemplo,INT
,VARCHAR
, etc.).DETERMINISTIC
oNOT DETERMINISTIC
: Indica si la función siempre devuelve el mismo resultado para los mismos parámetros.El cuerpo de la función se define entre
BEGIN
yEND
.
Manipulación#
Creación#
Supongamos que necesitamos una función que calcule el área de un círculo dado su radio:
DELIMITER //
CREATE FUNCTION CalcularAreaCirculo(radio FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN PI() * POW(radio, 2);
END
// DELIMITER ;
Notas:
PI()
es una función incorporada en MySQL que devuelve el valor de π.POW(radio, 2)
eleva el radio al cuadrado.
Reglas#
El usuario debe tener privilegios adecuados (
CREATE ROUTINE
).Las funciones no pueden realizar operaciones que modifiquen la base de datos, como
INSERT
,UPDATE
, oDELETE
.Siempre usa
DETERMINISTIC
si la función garantiza el mismo resultado para los mismos parámetros.
Ejecución#
Para usar una función en MySQL, simplemente se llama desde una consulta SELECT
:
SELECT CalcularAreaCirculo(5) AS Area;
Resultado esperado:
Area |
---|
78.5398 |
Modificación#
MySQL no permite modificar funciones directamente. Para cambiar una función existente, primero debes eliminarla y luego volver a crearla:
DROP FUNCTION IF EXISTS CalcularAreaCirculo;
DELIMITER //
CREATE FUNCTION CalcularAreaCirculo(radio FLOAT)
RETURNS FLOAT
DETERMINISTIC
BEGIN
RETURN PI() * POW(radio, 2);
END
// DELIMITER ;
Eliminación#
Para eliminar una función:
DROP FUNCTION IF EXISTS ContarPaisesPorContinente;
Ventajas#
Reutilización: Puedes encapsular lógica común en una función y reutilizarla en varias consultas.
Modularidad: Facilita la organización del código SQL.
Legibilidad: Las consultas complejas pueden ser más fáciles de entender al usar funciones.
Ejemplo#
Países por Continente#
Supongamos que queremos una función que devuelva el número de países en un continente específico:
DELIMITER //
CREATE FUNCTION ContarPaisesPorContinente(continente VARCHAR(50))
RETURNS INT
DETERMINISTIC
BEGIN
DECLARE total INT;
SELECT COUNT(*) INTO total
FROM world.country
WHERE Continent = continente;
RETURN total;
END
// DELIMITER ;
Para ejecutar la función:
SELECT ContarPaisesPorContinente('Asia') AS TotalPaises;
Resultado esperado:
TotalPaises |
---|
51 |
Obtener Capital#
Crea una función llamada
ObtenerCapital
que reciba como parámetro el nombre de un país y devuelva el nombre de su capital.** Usa las tablasCountry
yCity
de la base de datosWorld
.Ejecuta la función para encontrar la capital de “Colombia”.
Solución:
Paso 1: Crear la función.
DELIMITER //
CREATE FUNCTION ObtenerCapital(pais VARCHAR(50))
RETURNS VARCHAR(50)
DETERMINISTIC
BEGIN
DECLARE capital VARCHAR(50);
SELECT ci.Name INTO capital
FROM world.country co
JOIN world.city ci ON co.Capital = ci.ID
WHERE co.Name = pais;
RETURN capital;
END
// DELIMITER ;
Paso 2: Ejecutar la función.
SELECT ObtenerCapital('Colombia') AS Capital;
Resultado esperado:
Capital |
---|
“Santafé de Bogotá |
Conclusión#
Las funciones en MySQL son herramientas esenciales para encapsular y reutilizar lógica de negocio dentro de la base de datos. Estas son particularmente útiles para simplificar consultas complejas, mejorar la modularidad y garantizar consistencia en los cálculos.