Hola, estoy tratando de hacer un procedimiento con cursores cuya clausula where varía, el código lo pego al final. Como veis, hace una consulta y a partir de esa primera consulta tengo que ir haciendo mas con datos de la 1ª, para ello he tratado de construir "cursores dinámicos" pero no me funciona y no sé que hago mal.
 
Cualquier ayuda sería bienvenida
 
 
DELIMITER $$
 
DROP PROCEDURE IF EXISTS `pcligamercado`.`HAZ_CLASIFICACION` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `pcligamercado`.`HAZ_CLASIFICACION` ()
BEGIN
-- variables
DECLARE done INT DEFAULT 0;
DECLARE puntos INT DEFAULT 0;
declare nmbEquipo varchar(40);
DECLARE goleslocal INT DEFAULT 0;
DECLARE golesvisitante INT DEFAULT 0;
DECLARE iddivision INT DEFAULT 0;
DECLARE division INT DEFAULT 0;
declare pais varchar(40);
 
-- variables cursores
declare cur1 cursor for select distinct equipolocal from resultado;
declare cur2 cursor for select goleslocal, golesvisitante from resultado where equipolocal = nmbEquipo;
declare cur3 cursor for select goleslocal, golesvisitante from resultado where equipovisitante = nmbEquipo;
declare cur4 cursor for select iddivision from equipo where nombre = nmbEquipo;
declare cur5 cursor for select pais, division from pais_division where iddivision = iddivision;
 
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 
-- vacio clasificacion antes de hacer nada
DELETE FROM clasificacion;
commit;
 
-- de resultados coge los distintos nombres de equipos que hay
open cur1;
 
REPEAT
  set @puntos := 0;
  select concat('Debug : ','Paramater puntos = ',puntos);
  FETCH cur1 INTO nmbEquipo;
  select concat('Debug : ','Paramater nmbEquipo = ',nmbEquipo);
  -- Con cada nombre de equipo coge de resultados los partidos de ese
  -- equipo como local y en funcion del resultado guarda los puntos en variable tmpral
  select concat('Debug : ','Obtengo los resultados como local');
 
  open cur2;
  repeat
    FETCH cur2 INTO goleslocal,golesvisitante;
    select concat('Debug : ','Paramater goleslocal = ',goleslocal);
    select concat('Debug : ','Paramater golesvisitante = ',golesvisitante);
    if goleslocal > golesvisitante then
      set @puntos := @puntos + 3;
    else
      if goleslocal = golesvisitante then
        set @puntos := @puntos + 1;
      end if;
    end if;
  UNTIL done END REPEAT;
 
  CLOSE cur2;
  -- Con cada nombre de equipo coge de resultados los partidos de ese
  -- equipo como visitante y en funcion del resultado guarda los puntos en variable tmpral
  select concat('Debug : ','Obtengo los resultados como visitante');
 
  open cur3;
  repeat
    FETCH cur3 INTO goleslocal,golesvisitante;
    if golesvisitante > goleslocal then
      set @puntos := @puntos + 3;
    else
      if golesvisitante = goleslocal then
        set @puntos := @puntos + 1;
      end if;
    end if;
  UNTIL done END REPEAT;
 
  CLOSE cur3;
  -- Con el nombre del equipo se va a la tabla equipo y se coge el iddivision
  select concat('Debug : ','Obtengo el iddivision');
 
  open cur4;
  repeat
    FETCH cur4 INTO iddivision;
 
  UNTIL done END REPEAT;
 
  CLOSE cur4;
  -- Con el iddivision se obtiene de pais_division el pais y la division
  select concat('Debug : ','Obtengo el pais y division');
  open cur5;
  repeat
    FETCH cur5 INTO pais, division;
 
  UNTIL done END REPEAT;
 
  CLOSE cur5;
  -- Con todos los datos anteriores se inserta en clasificacion
  select concat('Debug : ','inserto en clasificacion');
  INSERT INTO clasificacion (pais, division, equipo, puntos) VALUES (pais, division, nmbEquipo, puntos);
 
UNTIL done END REPEAT;
 
CLOSE cur1;
 
commit;
 
END $$
 
DELIMITER ; 
   
 

