¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)
Cómo usar cursores en MySQL paso a paso con ejemplos prácticos
Portada » Cómo usar cursores en MySQL paso a paso con ejemplos prácticos

Cómo usar cursores en MySQL paso a paso con ejemplos prácticos

Anuncios
Publicidad

En este ejemplo práctico aprenderemos a usar cursores en MySQL mediante un procedimiento almacenado llamado recorrerNombre.

El objetivo será recorrer la columna nombre de la tabla clientes, dentro de la base de datos tiendaonline, utilizando un cursor y el comando FETCH.


¿Qué es un cursor en MySQL?

Un cursor en SQL es un mecanismo que permite recorrer fila por fila el resultado de una consulta.
A diferencia de una sentencia SELECT normal (que devuelve un conjunto de resultados completo), un cursor nos permite procesar cada fila individualmente dentro de un bucle.

Se utiliza mucho en:
✅ Procesamiento iterativo de registros.
✅ Ejecución de operaciones fila a fila.
✅ Escenarios donde no basta con una sola consulta SELECT.


Flujo del procedimiento

Durante cada iteración del bucle:

  1. FETCH recupera un valor (el nombre de un cliente) desde el cursor y lo guarda en la variable v_nombre.
  2. Si ya no hay más filas, se activa el manejador CONTINUE HANDLER FOR NOT FOUND, que cambia el valor de la variable v_semaforo a TRUE.
    • Esto provoca la salida del bucle (LEAVE).
  3. Si se recuperó un nombre correctamente, se imprime con:
SELECT v_nombre AS nombre;

Paso 1: Usar la base de datos

USE tiendaonline;

Cómo usar cursores en MySQL paso a paso

Paso 2: Comprobar la tabla clientes

SELECT * FROM tiendaonline.clientes;

Paso 3: Borrar el procedimiento si existe

DROP PROCEDURE IF EXISTS recorrerNombre;

Paso 4: Crear el procedimiento con un cursor

DELIMITER //

CREATE PROCEDURE recorrerNombre()
BEGIN
    -- Variable que permite salir del bucle cuando no quedan más filas
    DECLARE v_semaforo BOOLEAN DEFAULT 0;
    DECLARE v_nombre VARCHAR(50);

    -- Declaración del cursor para recorrer los nombres de clientes
    DECLARE cNombreCursor CURSOR FOR 
        SELECT c.nombre FROM tiendaonline.clientes AS c;

    -- Manejador: cuando no haya más filas, cambiamos el semáforo
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_semaforo = 1;

    -- Abrimos el cursor
    OPEN cNombreCursor;

    -- Bucle para recorrer los resultados
    recorrer: LOOP
        FETCH cNombreCursor INTO v_nombre;

        -- Salimos si no hay más registros
        IF v_semaforo THEN 
            LEAVE recorrer; 
        END IF;

        -- Mostramos el nombre recuperado
        SELECT v_nombre AS nombre;
    END LOOP;

    -- Cerramos el cursor
    CLOSE cNombreCursor;
END //

DELIMITER ;

Paso 5: Ejecutar el procedimiento

CALL recorrerNombre();

El resultado será una lista de nombres de clientes, uno por cada iteración.


Cómo usar cursores en MySQL paso a paso

Conclusión

Con este ejemplo hemos aprendido a:

  • Declarar y abrir un cursor en MySQL.
  • Usar FETCH para recuperar registros uno a uno.
  • Controlar la salida del bucle con un handler (NOT FOUND).
  • Mostrar los resultados fila por fila.

Este enfoque es muy útil en procesos donde se requiere recorrer registros de forma controlada, como en migraciones, transformaciones de datos o auditorías personalizadas.

Cómo usar cursores en MySQL paso a paso

Preguntas frecuentes (FAQ)

1. ¿Cuándo debo usar cursores en MySQL?
Los cursores son útiles cuando necesitas procesar registros de forma iterativa. Sin embargo, en la mayoría de los casos es más eficiente usar consultas con JOIN, GROUP BY o subconsultas.

2. ¿Qué pasa si no cierro un cursor?
Si no se cierra, el cursor permanece abierto y puede causar problemas de rendimiento o errores al intentar abrir nuevos cursores.

3. ¿Puedo usar varios cursores dentro de un mismo procedimiento?
Sí, puedes declarar varios cursores, siempre que gestiones cada uno correctamente con OPEN, FETCH y CLOSE.

4. ¿Qué diferencia hay entre un cursor y un bucle WHILE en MySQL?

  • Un cursor recorre el resultado de una consulta fila por fila.
  • Un bucle WHILE puede usarse para iteraciones controladas por condiciones, pero sin conexión directa con el resultado de una consulta.

5. ¿Qué alternativa más eficiente hay al uso de cursores?
En muchos casos, una sola consulta SQL bien estructurada (con JOIN, WHERE, HAVING, etc.) es más rápida que usar cursores. Los cursores son recomendables solo cuando no existe una solución set-based directa.

Te puede interesar:

Procedimientos almacenados en MySQL: Ejemplos, cursores y casos prácticos

Seguir leyendo:

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

Deja un comentario

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)
error: Content is protected !!
Scroll al inicio
Hablemos de informática
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.