UT5 Programacion de Bases de Datos
UT5 Programacion de Bases de Datos
BASES DE DATOS
UNIDAD TEMÁTICA Nº5
BASES DE DATOS
Técnico superior en Desarrollo
Aplicaciones Web
UT5 Programación de bases de datos
1. FUNCIONES
En SQL, una función es una secuencia de declaraciones que realizan
una tarea específica. Las funciones se utilizan para manipular o
calcular datos. SQL proporciona una serie de funciones incorporadas
que se pueden utilizar para realizar diversas tareas, incluyendo de
cadenas, numéricas, de fecha y de agregación. Algunas funciones son:
Funciones de cadena: realizan operaciones sobre datos de tipo
cadena.
CONCAT: concatena dos o más cadenas.
Ejemplo:
LENGTH(string)
Ejemplo:
ROUND(number, decimals)
Ejemplo:
02
UT5 Programación de bases de datos
ABS(number)
Ejemplo:
SELECT ABS(-4);
NOW()
Ejemplo:
SELECT NOW();
YEAR(date)
Ejemplo:
SELECT YEAR('2023-06-08');
03
UT5 Programación de bases de datos
2. PROCEDIMIENTOS ALMACENADOS
Los procedimientos almacenados son un grupo de declaraciones SQL que
se almacenan en una base de datos, las cuales se pueden llamar y
ejecutar repetidamente. Estos procedimientos pueden aceptar
parámetros de entrada al igual que devolver múltiples valores de salida.
Son extremadamente útiles para realizar operaciones repetitivas y
complejas, mejorando la eficiencia, así como la seguridad de las
aplicaciones de base de datos.
04
UT5 Programación de bases de datos
CALL SelectHighSalaryEmployees(50000);
Ventajas
Eficiencia: los procedimientos almacenados se almacenan en la
base de datos ya compilados, lo que puede hacer que su ejecución
sea más rápida que las consultas SQL ad hoc.
Seguridad: los procedimientos almacenados pueden proporcionar
un nivel adicional de seguridad, puesto que puedes restringir el
acceso a los datos de la base de datos a los procedimientos
almacenados en lugar de permitir el acceso directo a las tablas.
Modularidad: los procedimientos almacenados permiten la
modularidad en las aplicaciones de base de datos. Puedes escribir
un procedimiento una vez, y luego llamarlo desde cualquier parte
de tu aplicación.
Mantenimiento: los cambios en la lógica de la base de datos se
pueden realizar simplemente modificando los procedimientos
almacenados, en lugar de hacer cambios en el código de la
aplicación en varios lugares.
3. EVENTOS Y DISPARADORES
Los eventos y disparadores son dos tipos de objetos de base de datos
que permiten automatizar acciones en respuesta a ciertos cambios o
situaciones.
05
UT5 Programación de bases de datos
Para demostrar esto, podrías crear un evento que elimine todos los
registros de una tabla logs que sean más antiguos que 30 días y que se
ejecute todos los días a medianoche:
06
UT5 Programación de bases de datos
Copy code
CREATE TRIGGER RecordEmployeeDeletion
AFTER DELETE
ON employees FOR EACH ROW
BEGIN
INSERT INTO audit (action, employee_id, timestamp)
VALUES ('DELETE', OLD.employee_id, NOW());
END;
4. EXCEPCIONES
Las excepciones son eventos que alteran el flujo normal de ejecución de
un programa. En el contexto de las BD, suelen ser errores que ocurren
durante la ejecución de una consulta SQL, dentro de un procedimiento
almacenado o un disparador.
07
UT5 Programación de bases de datos
5. CURSORES
En SQL, un cursor es una herramienta que te permite recorrer las filas de
un conjunto de resultados. Esto puede ser útil cuando necesitas realizar
operaciones en cada fila del conjunto de resultados. Los cursores se
utilizan a menudo en los procedimientos almacenados y funciones, donde
el conjunto de resultados de una consulta debe ser procesado fila por
fila.
Una vez que has declarado un cursor, debes abrirlo para poder empezar
a utilizarlo.
OPEN cursor_name;
08
UT5 Programación de bases de datos
CLOSE cursor_name;
DELIMITER //
CREATE PROCEDURE process_rows()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE a CHAR(16);
DECLARE cur CURSOR FOR SELECT column_name FROM table_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO a;
IF done THEN
LEAVE read_loop;
END IF;
-- Procesar la fila aquí (la columna se almacena en la variable 'a')
END LOOP;
CLOSE cur;
END;
//
DELIMITER ;
09
UT5 Programación de bases de datos
DELIMITER //
CREATE FUNCTION CalcularTotal(idTrans INT) RETURNS
DECIMAL(10,2)
BEGIN
DECLARE total DECIMAL(10,2);
SELECT SUM(Precio) INTO total
FROM Productos
JOIN DetalleTransaccion ON Productos.idProducto =
DetalleTransaccion.idProducto
WHERE DetalleTransaccion.idTransaccion = idTrans;
RETURN total;
END //
DELIMITER ;
SELECT CalcularTotal(1);
DELIMITER //
CREATE PROCEDURE RealizarTransaccion(IN idCli INT, IN idProd INT)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
10
UT5 Programación de bases de datos
BEGIN
-- Error occurred, rollback and exit
ROLLBACK;
SELECT 'Ocurrió un error, se deshizo la transacción.';
END;
START TRANSACTION;
INSERT INTO Transaccion (Fecha, Monto_total, Estado_de_envio,
idCliente)
VALUES (CURDATE(), (SELECT Precio FROM Productos WHERE
idProducto = idProd), 'En preparación', idCli);
INSERT INTO DetalleTransaccion (idTransaccion, idProducto)
VALUES (LAST_INSERT_ID(), idProd);
UPDATE Transaccion SET Monto_total =
CalcularTotal(LAST_INSERT_ID()) WHERE idTransaccion =
LAST_INSERT_ID();
COMMIT;
END //
DELIMITER ;
DELIMITER //
CREATE TRIGGER SetMontoTotal BEFORE INSERT ON Transaccion
FOR EACH ROW
BEGIN
SET NEW.Monto_total = CalcularTotal(NEW.idTransaccion);
END //
DELIMITER ;
11
UT5 Programación de bases de datos
DELIMITER //
CREATE PROCEDURE ListarProductos(IN idTrans INT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE nombreProd VARCHAR(100);
DECLARE cur CURSOR FOR
SELECT Nombre FROM Productos
JOIN DetalleTransaccion ON Productos.idProducto =
DetalleTransaccion.idProducto
WHERE DetalleTransaccion.idTransaccion = idTrans;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO nombreProd;
IF done THEN
LEAVE read_loop;
END IF;
SELECT nombreProd;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
CALL ListarProductos(1);
12
UT5 Programación de bases de datos
13