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.