Table of Contents
Procedimientos almacenados en MySQL: Ejemplos, cursores y casos prácticos
Aprende paso a paso cómo crear, ejecutar y optimizar procedimientos almacenados en MySQL, desde los más simples hasta los que usan cursores, variables y validaciones lógicas.
Esta guía pilar reúne todos los ejemplos prácticos y artículos de la serie, para que domines el uso de CREATE PROCEDURE
como un profesional.
¿Qué es un procedimiento almacenado?
Un procedimiento almacenado (o Stored Procedure) es un bloque de código SQL guardado en el servidor MySQL que ejecuta una o varias sentencias de forma automática.
Se utiliza para automatizar tareas repetitivas, validar datos, insertar registros o procesar resultados complejos sin necesidad de escribir las mismas consultas una y otra vez.
En resumen: un procedimiento almacenado es como una función, pero puede modificar datos y no necesariamente devuelve un valor.
Sintaxis básica de un procedimiento en MySQL
DELIMITER //
CREATE PROCEDURE nombreProcedimiento()
BEGIN
-- Aquí va el código SQL
END //
DELIMITER ;
Luego puedes ejecutarlo con:
CALL nombreProcedimiento();
Procedimientos almacenados paso a paso
Procedimientos con parámetros
- Cómo crear un procedimiento almacenado con parámetros de entrada (IN) en MySQL
- Procedimiento PobtenerNombre_clienteYTituloLibro() en MySQL
- Procedimiento pobtenernombreYproducto() en MySQL
Procedimientos con cursores
- Cómo usar cursores en MySQL paso a paso con ejemplos prácticos
- Procedimiento almacenado con cursor en MySQL para recorrer y validar un usuario por ID
- Cómo crear un procedimiento con FETCH en MySQL (ejemplo paso a paso)
Procedimientos para inserción y validación
- Crear un procedimiento para insertar datos en una tabla
- Procedimiento con validación de usuarios mediante SELECT y condiciones IF
- Ejemplo práctico: recorrer registros con CURSOR y comprobar si un usuario existe
Ejemplo completo con CURSOR y validación
A continuación, un ejemplo de procedimiento almacenado que recorre una tabla de usuarios y valida cada ID usando un cursor:
DELIMITER //
CREATE PROCEDURE validarUsuarios()
BEGIN
DECLARE fin INT DEFAULT 0;
DECLARE vId INT;
DECLARE vNombre VARCHAR(100);
DECLARE cur CURSOR FOR SELECT id, nombre FROM usuarios;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin = 1;
OPEN cur;
ciclo: LOOP
FETCH cur INTO vId, vNombre;
IF fin = 1 THEN
LEAVE ciclo;
END IF;
IF vId IS NOT NULL THEN
SELECT CONCAT('Usuario válido: ', vNombre) AS resultado;
ELSE
SELECT 'Usuario no válido' AS resultado;
END IF;
END LOOP;
CLOSE cur;
END //
DELIMITER ;
Explicación:
- DECLARE CURSOR crea el cursor con la consulta de usuarios.
- FETCH extrae fila por fila los datos del cursor.
- LOOP / LEAVE controlan el bucle.
- CONTINUE HANDLER detecta cuándo no hay más filas.
- El procedimiento imprime un mensaje de validación para cada usuario.
🧩 Ventajas de los procedimientos almacenados
- Mejoran el rendimiento: se ejecutan en el servidor, evitando enviar consultas repetidas.
- Aumentan la seguridad: puedes dar permisos solo para ejecutar procedimientos, sin exponer las tablas.
- Reutilización de lógica: centralizas operaciones comunes (inserciones, validaciones, reportes).
- Mantenimiento sencillo: cambias la lógica en un solo lugar.
- Facilitan integraciones: son útiles al conectar MySQL con aplicaciones externas (PHP, Python, etc.).
Buenas prácticas
- Siempre usa
DELIMITER //
para evitar errores de interpretación. - Declara tus variables al inicio del bloque.
- Controla errores con
DECLARE HANDLER
. - Comenta el código para mantener claridad.
- No abuses de cursores si puedes resolverlo con una sola sentencia SQL.