148 lines
4.7 KiB
SQL
148 lines
4.7 KiB
SQL
---Uso de funciones en MYSQL
|
|
|
|
--Pensadas para realizar cálculos y devolver resultados mediante RETURN, devuelven un valor con un tipo definido.
|
|
|
|
--Pueden ser invocadas desde una consulta, por ejemplo:
|
|
SELECT nombre_funcion(parametros) FROM tabla
|
|
--No pueden operar con transacciones
|
|
|
|
----Vocabulario básico para crear una función en MySQL:
|
|
|
|
CREATE FUNCTION: sentencia para crear la función.
|
|
|
|
NOMBRE_DE_LA_FUNCION: nombre de la función debe ser único en la base de datos.
|
|
|
|
RETURNS: Especificamos el tipo de dato que vamos a retornar como INT, VARCHAR, FLOAT, etc.
|
|
|
|
BEGIN ... END: Define el cuerpo de la función.
|
|
|
|
DECLARE: declarar variables.
|
|
|
|
SET: asignar valores a variables.
|
|
|
|
INTO: Se utiliza en combinación con una consulta SQL para asignar los resultados de la consulta a variables.
|
|
|
|
RETURN: sentencia para devolver el resultado.
|
|
|
|
PARAMETROS: son los parametros que le pasamos a la función (parametro1 INT,parametro2 FLOAT)
|
|
|
|
---Tipos de función
|
|
-- DETERMINISTIC: Indica que la función siempre produce el mismo resultado para los mismos valores de entrada.
|
|
-- NO SQL: no realiza operaciones en la base de datos.
|
|
-- READS SQL DATA: puede leer datos de la base de datos, pero no modificarlos. (Hay que indicarlo cuando sea el caso)
|
|
|
|
|
|
--- Estructura básica de una función MySQL
|
|
DELIMITER //
|
|
CREATE FUNCTION nombre_funcion (variable tipo)
|
|
RETURNS tipo
|
|
BEGIN
|
|
--INICIO DE ACCIONES
|
|
DECLARE numero INT; -- Declara la variable numero como INT
|
|
SELECT count(*) INTO numero FROM clientes; --Realiza una consulta para contar el número de filas en la tabla clientes y asigna el resultado a la variable numero.
|
|
RETURN numero;
|
|
--FIN DE ACCIONES
|
|
END//
|
|
DELIMITER ;
|
|
|
|
|
|
--Ejemplo
|
|
|
|
CREATE FUNCTION calcular_area_circulo (radio FLOAT)
|
|
RETURNS FLOAT
|
|
BEGIN
|
|
DECLARE area FLOAT; -- Declaración de variable local
|
|
SET area = PI() * POW(radio, 2); -- Cálculo del área
|
|
RETURN area; -- Devolución del resultado
|
|
END;
|
|
|
|
--Llamada a la función
|
|
SELECT calcular_area_circulo(5);
|
|
|
|
--Podemos llamar a una función desde diferentes contextos, incluyendo consultas SQL, procedimientos almacenados, disparadores (triggers) y funciones definidas por el usuario.
|
|
|
|
|
|
--Otro ejemplo función que devuelve el nombre del mes en español
|
|
DELIMITER //
|
|
|
|
CREATE FUNCTION nombre_mes(numero_mes INT) RETURNS VARCHAR(20)
|
|
BEGIN
|
|
DECLARE nombre VARCHAR(20);
|
|
|
|
CASE numero_mes
|
|
WHEN 1 THEN SET nombre = 'Enero';
|
|
WHEN 2 THEN SET nombre = 'Febrero';
|
|
WHEN 3 THEN SET nombre = 'Marzo';
|
|
WHEN 4 THEN SET nombre = 'Abril';
|
|
WHEN 5 THEN SET nombre = 'Mayo';
|
|
WHEN 6 THEN SET nombre = 'Junio';
|
|
WHEN 7 THEN SET nombre = 'Julio';
|
|
WHEN 8 THEN SET nombre = 'Agosto';
|
|
WHEN 9 THEN SET nombre = 'Septiembre';
|
|
WHEN 10 THEN SET nombre = 'Octubre';
|
|
WHEN 11 THEN SET nombre = 'Noviembre';
|
|
WHEN 12 THEN SET nombre = 'Diciembre';
|
|
ELSE SET nombre = 'Mes no válido';
|
|
END CASE;
|
|
|
|
RETURN nombre;
|
|
END //
|
|
|
|
DELIMITER ;
|
|
|
|
|
|
-- Principales estructuras para controlar el flujo de código
|
|
|
|
--IF-THEN-ELSE: Permite ejecutar un bloque de código si una condición especificada es verdadera y otro bloque si la condición es falsa.
|
|
|
|
IF condición THEN
|
|
-- Código a ejecutar si la condición es verdadera
|
|
ELSE
|
|
-- Código a ejecutar si la condición es falsa
|
|
END IF;
|
|
|
|
--CASE: Evalúa una lista de condiciones y devuelve un valor único correspondiente a la primera condición verdadera. Se puede usar en su forma simple o en su forma de expresión, donde se puede utilizar para asignar valores a una variable.
|
|
|
|
CASE
|
|
WHEN condición1 THEN valor1
|
|
WHEN condición2 THEN valor2
|
|
...
|
|
ELSE valor_por_defecto
|
|
END;
|
|
Ejemplo de asignación de valor mediante CASE:
|
|
|
|
Otro ejemplo:
|
|
SET variable =
|
|
CASE
|
|
WHEN condición1 THEN valor1
|
|
WHEN condición2 THEN valor2
|
|
...
|
|
ELSE valor_por_defecto
|
|
END;
|
|
|
|
|
|
--WHILE: Permite ejecutar un bloque de código repetidamente mientras una condición especificada sea verdadera.
|
|
|
|
WHILE condición DO
|
|
-- Código a ejecutar mientras la condición sea verdadera
|
|
END WHILE;
|
|
|
|
|
|
--LOOP: Se utiliza para crear bucles que se ejecutan indefinidamente hasta que se alcanza una condición de salida.
|
|
|
|
LOOP
|
|
-- Código a ejecutar
|
|
IF condición_de_salida THEN
|
|
LEAVE; -- Termina el bucle
|
|
END IF;
|
|
END LOOP;
|
|
|
|
|
|
--ITERATE: Se utiliza dentro de un bucle para saltar a la siguiente iteración del bucle.
|
|
|
|
ITERATE; -- Salta a la siguiente iteración del bucleç
|
|
|
|
|
|
--LEAVE: Se utiliza dentro de un bucle para salir del bucle.
|
|
|
|
LEAVE; -- Sale del bucle |