IFCD0210/Practicas/Practicas_SQL/codigo/INTRO_SQL_FUNCTION.sql
2024-04-02 13:54:03 +02:00

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