INSTITUTO DE FORMACIÓN PROFESIONAL
Dirección General de Educación Técnica
Área: Tecnología de la Información y la Comunicación
Carrera: Técnico Superior en TIC en Desarrollo de Sistemas Informáticos
PROCEDIMIENTO ALMACENADO
Instructor: Lic. Diego González
Autores:
- Diego Iván Cantero González
- Mirian Susana Cáceres Martínez
- Elvira Beatriz Fariña Rivas
- Sara Rebeca Domínguez Giménez
TIC
1er Semestre
San Lorenzo – Paraguay
2025
1
Procedimientos Almacenados
Resumen
Este documento explora los procedimientos almacenados en MySQL como herramienta
para automatizar tareas en bases de datos. Se presentan definiciones, ventajas, sintaxis y casos
prácticos en entornos como tiendas en línea, bancos y bibliotecas. Los procedimientos
almacenados mejoran el rendimiento y la seguridad del sistema, facilitando operaciones
eficientes y confiables.
2
Procedimientos Almacenados
Introducción
Imagina que cada vez que realizas una operación en una base de datos—como registrar
un empleado o actualizar un pedido—debes escribir manualmente la misma consulta SQL una y
otra vez. Ahora, piensa en una empresa con miles de transacciones diarias. ¿Cuánto tiempo y
recursos se perderían?
Aquí es donde los procedimientos almacenados en MySQL entran en acción. Estas
poderosas herramientas permiten automatizar procesos, optimizar el rendimiento y
garantizar la seguridad de los datos, evitando errores y mejorando la eficiencia del sistema.
En este trabajo exploraremos cómo funcionan los procedimientos almacenados, sus
ventajas clave y casos prácticos que demuestran su impacto en la gestión de bases de datos.
Desde la validación de información hasta la ejecución de transacciones seguras, comprender
su uso es esencial para el desarrollo de aplicaciones escalables y eficientes.
3
Procedimientos Almacenados
Objetivos
General: Explicar la utilidad y funcionamiento de los procedimientos
almacenados en bases de datos.
Específicos:
Definir qué es un procedimiento almacenado y su importancia.
Analizar casos de uso en entornos empresariales.
Implementar un ejercicio práctico para demostrar su aplicación.
4
Procedimientos Almacenados
¿Qué es un procedimiento almacenado?
Un procedimiento almacenado es un conjunto de instrucciones SQL que se guardan en la
base de datos y pueden ejecutarse como una única unidad. Se utilizan para automatizar tareas
repetitivas, mejorar el rendimiento y aumentar la seguridad, ya que permiten controlar el acceso
y la manipulación de datos sin exponer consultas directas.
Forma de uso
DELIMITER //
CREATE PROCEDURE nombre_procedimiento (
IN parametro1 VARCHAR (50),
OUT parametro2 INT
BEGIN
-- Lógica del procedimiento
SELECT * FROM tabla WHERE campo = parametro1;
SELECT ROW_COUNT () INTO parametro2;
END //
DELIMITER;
5
Procedimientos Almacenados
Tipos de parámetros
Parámetros de entrada (IN)
DELIMITER //
CREATE PROCEDURE BuscarClientePorNombre (
IN p_nombre VARCHAR (100)
BEGIN
SELECT *
FROM clientes
WHERE nombre LIKE CONCAT ('%', p_nombre, '%');
END //
DELIMITER;
CALL BuscarClientePorNombre('Carlos');
Parámetros de salida (OUT)
DELIMITER //
CREATE PROCEDURE ContarEmpleadosPorSalario (
IN p_umbralSalario DECIMAL (10,2),
OUT p_totalEmpleados INT
BEGIN
SELECT COUNT (*) INTO p_totalEmpleados
6
Procedimientos Almacenados
FROM empleados
WHERE salario > p_umbralSalario;
END //
DELIMITER;
CALL ContarEmpleadosPorSalario (3000, @cantidad);
SELECT @cantidad AS TotalEmpleados;
Parámetros de Entrada/Salida (INOUT)
DELIMITER //
CREATE PROCEDURE AcumularVentas (
IN p_valorVenta DECIMAL (10,2),
INOUT p_totalVentas DECIMAL (10,2)
BEGIN
SET p_totalVentas = p_totalVentas + p_valorVenta;
END //
DELIMITER;
SET @totalVentas = 0;
CALL AcumularVentas (150.00, @totalVentas);
SELECT @totalVentas AS TotalVentas;
7
Procedimientos Almacenados
Casos prácticos
1- Tienda Online - Procesar Venta
Problema: Cuando un cliente compra, necesitas hacer 3 cosas: registrar venta, reducir
stock y calcular impuestos.
Solución: Un procedimiento que hace todo en una sola llamada.
DELIMITER //
CREATE PROCEDURE procesar_venta (
IN producto_id INT,
IN cantidad INT,
IN cliente_id INT,
OUT mensaje VARCHAR (200),
OUT total_final DECIMAL (10,2)
BEGIN
DECLARE precio_producto DECIMAL (10,2);
DECLARE stock_actual INT;
DECLARE subtotal DECIMAL (10,2);
DECLARE impuestos DECIMAL (10,2);
8
Procedimientos Almacenados
SELECT precio, stock INTO precio_producto, stock_actual
FROM productos
WHERE id = producto_id;
IF stock_actual >= cantidad THEN
SET subtotal = precio_producto * cantidad;
SET impuestos = subtotal * 0.10;
SET total_final = subtotal + impuestos;
INSERT INTO ventas (cliente_id, producto_id, cantidad, subtotal, impuestos, total)
VALUES (cliente_id, producto_id, cantidad, subtotal, impuestos, total_final)
UPDATE productos
SET stock = stock - cantidad
WHERE id = producto_id;
SET mensaje = 'Venta procesada correctamente';
ELSE
SET mensaje = CONCAT ('Error: Solo hay ', stock_actual, ' unidades disponibles');
SET total_final = 0;
9
Procedimientos Almacenados
END IF;
END //
DELIMITER;
2- Banco - Transferencia de Dinero
Problema: Transferir dinero entre cuentas verificando fondos y registrando movimientos.
Solución: Un procedimiento que hace la transferencia completa de forma segura.
DELIMITER //
CREATE PROCEDURE transferir_dinero (
IN cuenta_origen INT,
IN cuenta_destino INT,
IN monto DECIMAL (10,2),
OUT resultado VARCHAR (200)
BEGIN
DECLARE saldo_origen DECIMAL (10,2);
DECLARE cuenta_origen_existe INT DEFAULT 0;
DECLARE cuenta_destino_existe INT DEFAULT 0;
10
Procedimientos Almacenados
SELECT COUNT (*) INTO cuenta_origen_existe
FROM cuentas WHERE numero_cuenta = cuenta_origen;
SELECT COUNT (*) INTO cuenta_destino_existe
FROM cuentas WHERE numero_cuenta = cuenta_destino;
IF cuenta_origen_existe = 0 THEN
SET resultado = 'Error: Cuenta origen no existe';
ELSEIF cuenta_destino_existe = 0 THEN
SET resultado = 'Error: Cuenta destino no existe';
ELSE
SELECT saldo INTO saldo_origen
FROM cuentas WHERE numero_cuenta = cuenta_origen;
IF saldo_origen >= monto THEN
UPDATE cuentas SET saldo = saldo - monto
WHERE numero_cuenta = cuenta_origen;
UPDATE cuentas SET saldo = saldo + monto
11
Procedimientos Almacenados
WHERE numero_cuenta = cuenta_destino;
INSERT INTO movimientos (cuenta_origen, cuenta_destino, monto, fecha, tipo)
VALUES (cuenta_origen, cuenta_destino, monto, NOW (),
'TRANSFERENCIA');
SET resultado = CONCAT ('Transferencia exitosa: $', monto);
ELSE
SET resultado = CONCAT ('Error: Saldo insuficiente. Disponible: $',
saldo_origen);
END IF
END IF;
END //
DELIMITER;
CALL transferir_dinero (12345, 67890, 500.00, @resultado);
SELECT @resultado;
3- Biblioteca - Préstamo de Libros
12
Procedimientos Almacenados
Problema: Prestar un libro verificando disponibilidad y límites del usuario.
Solución: Un procedimiento que maneja todo el proceso de préstamo.
DELIMITER //
CREATE PROCEDURE prestar_libro (
IN libro_id INT,
IN usuario_id INT,
IN dias_prestamo INT,
OUT mensaje VARCHAR (200),
OUT fecha_devolucion DATE
BEGIN
DECLARE libro_disponible INT DEFAULT 0;
DECLARE usuario_valido INT DEFAULT 0;
DECLARE prestamos_pendientes INT DEFAULT 0;
DECLARE titulo_libro VARCHAR (200);
SELECT COUNT (*), titulo INTO libro_disponible, titulo_libro
FROM libros
13
Procedimientos Almacenados
WHERE id = libro_id AND estado = 'DISPONIBLE'
GROUP BY título;
SELECT COUNT (*) INTO usuario_valido
FROM usuarios WHERE id = usuario_id;
-- Verificar préstamos pendientes del usuario
SELECT COUNT (*) INTO prestamos_pendientes
FROM prestamos
WHERE usuario_id = usuario_id AND estado = 'ACTIVO';
IF libro_disponible = 0 THEN
SET mensaje = 'Error: Libro no disponible';
SET fecha_devolucion = NULL;
ELSEIF usuario_valido = 0 THEN
SET mensaje = 'Error: Usuario no válido';
SET fecha_devolucion = NULL;
ELSEIF prestamos_pendientes >= 3 THEN
14
Procedimientos Almacenados
SET mensaje = 'Error: Usuario tiene 3 préstamos activos (límite máximo)';
SET fecha_devolucion = NULL;
ELSE
SET fecha_devolucion = DATE_ADD (CURDATE (), INTERVAL dias_prestamo
DAY);
INSERT INTO prestamos (libro_id, usuario_id, fecha_prestamo, fecha_devolucion,
estado)
VALUES (libro_id, usuario_id, CURDATE (), fecha_devolucion, 'ACTIVO');
UPDATE libros
SET estado = 'PRESTADO'
WHERE id = libro_id;
SET mensaje = CONCAT ('Préstamo exitoso: "', titulo_libro, '" - Devolver antes del:
', fecha_devolucion);
END IF;
END //
DELIMITER;
15
Procedimientos Almacenados
CALL prestar_libro (101, 789, 14, @mensaje, @fecha_dev);
SELECT @mensaje, @fecha_dev;
Ejercicio para hacer en clase
Realizar un Procedimiento Almacenado que sume dos números.
Realizar un Procedimiento Almacenado que inserte clientes.
16
Procedimientos Almacenados
conclusión
Los procedimientos almacenados en MySQL representan una herramienta fundamental
para la gestión eficiente de bases de datos, permitiendo automatizar procesos, optimizar
consultas y mejorar la seguridad de los datos. Su uso adecuado facilita la ejecución de
operaciones repetitivas y garantiza una mejor organización en aplicaciones empresariales.
Desde la actualización automática de registros hasta la validación de información antes de
su inserción, los procedimientos almacenados permiten reducir errores y mejorar el
rendimiento del sistema. Además, al integrar transacciones, se asegura que las operaciones se
ejecuten correctamente o se reviertan si surge un problema, evitando inconsistencias en la base
de datos.
Por lo tanto, comprender y aplicar correctamente los procedimientos almacenados no solo
optimiza el manejo de datos, sino que también reduce la carga de procesamiento en el
servidor, mejorando la eficiencia general del sistema. En el contexto actual, donde el acceso
rápido y seguro a la información es clave, su implementación resulta esencial para garantizar
sistemas robustos y escalables.
17
Procedimientos Almacenados
referencias
Digital Ocean. (2023). How to use stored procedures in MySQL.
https://www.digitalocean.com/community/tutorials/how-to-use-stored-procedures-in-mysql
ISO/IEC. (2003). SQL:2003 Standard - Information technology — Database languages
— SQL. International Organization for Standardization.
MySQLTutorial.org. (2023). MySQL stored procedures.
https://www.mysqltutorial.org/mysql-storedprocedure/
Oracle Corporation. (2024). MySQL 8.4 reference manual - CREATE PROCEDURE and
CREATE FUNCTION statements. https://dev.mysql.com/doc/refman/8.4/en/create-
procedure.html
Oracle Corporation. (2024). MySQL 8.4 reference manual - Using stored routines.
https://dev.mysql.com/doc/refman/8.4/en/stored-routines.html
Oracle Corporation. (2024). MySQL 8.4 FAQ: Stored procedures and functions.
https://dev.mysql.com/doc/refman/8.4/en/faqs-stored-procs.html
PhoenixNAP. (2025). MySQL stored procedures {Create, List, Alter, & Drop}.
https://phoenixnap.com/kb/mysql-stored-procedure
Sharma, A. (2021). Learn MySQL: The basics of MySQL stored procedures. SQLShack.
https://www.sqlshack.com/learn-mysql-the-basics-of-mysql-stored-procedures/
Tutorialspoint. (2025). MySQL stored procedure.
https://www.tutorialspoint.com/mysql/mysql-storedprocedure.htm