|    
			
				27/05/2009, 11:11
			
			
			  | 
  |   |  |  |  Fecha de Ingreso: noviembre-2007 
						Mensajes: 163
					 Antigüedad: 17 años, 11 meses Puntos: 0 |  | 
  |  Procedimiento con cursores dinámicos?  
  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 ;
     |