Hace un tiempo escribí sobre procedimientos y funciones almacenados en mysql y hoy voy a hablar sobre como crear cursores en mysql, que son bucles que sirven para recorrer el resultado de una query y guardar dicho resultado en variables o hacer operaciones con otras tablas. Para poder crear cursores hay que saber primero como crear procedimientos y funciones almacenados en mysql ya que en mysql se crean dentro de las funciones y procedimientos almacenados.
El siguiente ejemplo muestra el total de artículos de una categoría de un blog.
DELIMITER $$
DROP PROCEDURE IF EXISTS articulo $$
CREATE PROCEDURE articulo(param_categoria INT)
BEGIN
//Se declara variable donde se va a guardar el valor total
DECLARE TOTAL INT;
//Se declara el cursor con el select con cuyos datos se va a iterar
DECLARE articulos_categoria_cursor CURSOR FOR
SELECT COUNT(*) FROM articulos WHERE id_categoria = param_categoria;
//Declaración de un manejador de error tipo NOT FOUND
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @hecho = TRUE;
//Se abre el cursor. Al abrir el cursor este sitúa un puntero a la primera fila del resultado de la consulta.
OPEN articulos_categoria_cursor;
//Empieza el bucle de lectura
loop1: LOOP
//Se guarda el resultado en la variable, hay una variable y un campo en el SELECT de la declaración del cursor
FETCH articulos_categoria_cursor INTO TOTAL;
//Se sale del bucle cuando no hay elementos por recorrer
IF @hecho THEN
LEAVE loop1;
END IF;
END LOOP loop1;
//Se cierra el cursor
CLOSE articulos_categoria_cursor;
//Se muestra el resultado
SELECT TOTAL;
END
Como se puede ver este cursor es bastante sencillito. Espero que os haya parecido útil.