Table of Contents
Cómo crear un procedimiento con FETCH en MySQL (ejemplo paso a paso)
En este tutorial aprenderás cómo crear un procedimiento almacenado en MySQL utilizando cursores y el comando FETCH.
El objetivo es recorrer la columna titulo de la tabla libros dentro de la base de datos bd_biblioteca.
Además, se implementa un handler de errores para manejar excepciones de SQL, lo que permite capturar y controlar problemas al ejecutar el procedimiento.
1. Seleccionar la base de datos
USE bd_biblioteca;
2. Consultar la tabla de trabajo
Revisamos el contenido de la tabla libros, sobre la que recorreremos los títulos:
SELECT * FROM libros;
3. Eliminar el procedimiento si existe
Antes de crearlo, eliminamos cualquier versión previa:
DROP PROCEDURE IF EXISTS precorrerTitulo;
4. Definir el delimitador
DELIMITER //
5. Crear el procedimiento precorrerTitulo
Aquí está el procedimiento completo:
CREATE PROCEDURE precorrerTitulo()
BEGIN
-- Variable semáforo para salir del bucle
DECLARE semaforo BOOLEAN DEFAULT FALSE;
-- Variable para almacenar el título
DECLARE vtitulo VARCHAR(100);
-- Cursor para recorrer los títulos de la tabla libros
DECLARE c CURSOR FOR SELECT titulo FROM libros;
-- Handler para cuando no se encuentren más filas
DECLARE CONTINUE HANDLER FOR NOT FOUND SET semaforo = TRUE;
-- Handler para capturar errores SQL
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT 'ERROR';
ROLLBACK;
END;
-- Abrimos el cursor
OPEN c;
-- Bucle para recorrer los títulos
recorrer: LOOP
FETCH c INTO vtitulo;
IF semaforo THEN
LEAVE recorrer;
END IF;
-- Mostrar cada título encontrado
SELECT vtitulo AS 'título del libro';
END LOOP;
-- Cerramos el cursor
CLOSE c;
END;
//
6. Restaurar el delimitador
DELIMITER ;
7. Ejecutar el procedimiento
CALL precorrerTitulo();
Resultado esperado
Cuando ejecutes el procedimiento, MySQL recorrerá todos los registros de la tabla libros y devolverá los títulos uno por uno.
Ejemplo de salida (dependiendo de los datos de tu tabla):
+-----------------+
| título del libro|
+-----------------+
| El Quijote |
| Cien años... |
| Rayuela |
| ... |
+-----------------+
Con este procedimiento:
- Aprendiste a usar cursores y FETCH en MySQL.
- Implementaste un manejador de errores (EXIT HANDLER) para mayor seguridad.
- Recorriste dinámicamente los resultados de una consulta.
Este tipo de procedimiento es muy útil cuando necesitas procesar registros uno a uno en lugar de hacerlo de forma masiva.
❓ Preguntas frecuentes (FAQ)
1. ¿Qué es un cursor en MySQL?
Un cursor es un mecanismo que permite recorrer fila por fila los resultados de una consulta SQL.
2. ¿Por qué usamos un semáforo (BOOLEAN)?
Sirve como señal para saber cuándo se han recorrido todas las filas y salir del bucle.
3. ¿Qué hace el CONTINUE HANDLER FOR NOT FOUND?
Indica que cuando no se encuentren más filas en el cursor, se active el semáforo y se finalice el bucle.
4. ¿Qué diferencia hay entre CONTINUE HANDLER y EXIT HANDLER?
CONTINUE HANDLER: Maneja eventos específicos (como NOT FOUND) y permite seguir con el flujo.EXIT HANDLER: Se ejecuta ante errores graves (SQLEXCEPTION) y corta el proceso.

5. ¿Puedo recorrer varias columnas con FETCH?
Sí. Solo debes declarar más variables y añadirlas en el FETCH. Ejemplo:
DECLARE vtitulo VARCHAR(100); DECLARE vautor VARCHAR(100); FETCH c INTO vtitulo, vautor;



Te puede interesar:
Procedimientos almacenados en MySQL: Ejemplos, cursores y casos prácticos
últimas entradas:






