Table of Contents
Procedimiento almacenado con cursor en MySQL para recorrer y validar un usuario por ID
En este ejemplo crearemos un procedimiento almacenado en MySQL llamado recorrerUsuario
, que emplea un cursor para recorrer el nombre de un cliente a partir de su id_cliente
.
El procedimiento compara el valor recuperado con un nombre concreto (Marta Ruiz
) y devuelve un mensaje indicando si coincide o no. De esta manera, podrás ver cómo funcionan:
✅ Los cursores en MySQL.
✅ El control de flujo mediante bucles.
✅ El uso de manejadores de condiciones (HANDLER
) dentro de procedimientos almacenados.
1. Seleccionar la base de datos
USE tiendaonline;
2. Eliminar el procedimiento si ya existe
DROP PROCEDURE IF EXISTS recorrerUsuario;
3. Crear el procedimiento recorrerUsuario
Aquí está el código completo del procedimiento con cursor:
DELIMITER //
CREATE PROCEDURE recorrerUsuario(IN pId INT)
BEGIN
DECLARE vNombre VARCHAR(30);
DECLARE done INT DEFAULT 0;
-- Declarar el cursor, selecciona el nombre de un cliente en función de su ID
DECLARE curNombre CURSOR FOR
SELECT c.nombre
FROM clientes AS c
WHERE id_cliente = pId;
-- Handler: cuando no haya más filas, asigna 1 a la variable done
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- Abrimos el cursor
OPEN curNombre;
-- Bucle para recorrer resultados
centros_loop: LOOP
FETCH curNombre INTO vNombre;
IF done = 1 THEN
LEAVE centros_loop;
END IF;
-- Comparación con un nombre concreto
IF vNombre = 'Marta Ruiz' THEN
SELECT CONCAT('✅ Encontrado: ', vNombre) AS resultado;
LEAVE centros_loop;
ELSE
SELECT CONCAT('❌ No coincide: ', vNombre) AS resultado;
END IF;
END LOOP;
-- Cerramos el cursor
CLOSE curNombre;
END //
DELIMITER ;
4. Llamar al procedimiento
Por ejemplo, si queremos recorrer el cliente con ID 3
:
CALL recorrerUsuario(3);
5. Resultado esperado
Si el cliente con id_cliente = 3
se llama Marta Ruiz:
✅ Encontrado: Marta Ruiz
Si el cliente con id_cliente = 3
tiene otro nombre, por ejemplo Luis Pérez:
❌ No coincide: Luis Pérez
Este procedimiento almacenado demuestra cómo:
- Usar un cursor en MySQL para recorrer resultados.
- Manejar condiciones con
HANDLER
. - Implementar lógica de control (
LOOP
,LEAVE
). - Personalizar la salida con
SELECT CONCAT(...)
.
Este patrón es muy útil cuando necesitas procesar filas una a una y aplicar reglas de negocio más complejas que no se resuelven con una simple consulta SQL.

Si no existe:



Preguntas frecuentes (FAQ)
1. ¿Por qué usar un cursor si solo buscamos un usuario?
En este ejemplo el cursor se utiliza con fines didácticos. En la práctica, bastaría un SELECT ... WHERE id_cliente = X
. Sin embargo, los cursores se vuelven muy útiles cuando necesitas recorrer varias filas.
2. ¿Qué hace DECLARE CONTINUE HANDLER FOR NOT FOUND
?
Evita que el procedimiento lance un error cuando ya no quedan filas por recorrer. En su lugar, cambia el valor de la variable done
, lo que permite salir del bucle.
3. ¿Cómo cambiar el nombre a buscar?
Puedes modificar la condición IF vNombre = 'Marta Ruiz'
por cualquier otro nombre o incluso recibirlo como parámetro (IN pNombre VARCHAR(30)
).
4. ¿Qué pasa si el ID no existe en la tabla?
El cursor no devolverá filas y, al entrar en el bucle, la variable done
se pondrá en 1
inmediatamente. Por lo tanto, no habrá salida de texto.



Seguir leyendo: