Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/02/2015, 17:15
M_Bosch
 
Fecha de Ingreso: marzo-2012
Ubicación: Menorca
Mensajes: 13
Antigüedad: 12 años, 8 meses
Puntos: 0
Fallo al crear procedimiento

Hola buenas, estoy realizando una tarea en la que me piden crear una rutina que sume todos los tantos marcados por los jugadores de cada clase, muestre el resultado con la suma y el nombre del grupo ordenado de mayor a menor y luego tengo que sumar 2 puntos al primer grupo y 1 punto al segundo. El código aun no esta terminado por lo que aún faltan (o sobran) cosas, pero los selects los he probado individualmente y funcionan correctamente. El problema que tengo es al crear el procedimiento, si lo dejo tal y como esta en el código me dice que falta un END en el primer select, y si lo comento, en el END final me dice que falta una sentencia IF. Alguien sabe porque pasa esto? Y ya que aún no lo he podido probar, pensáis que el cursor y el IF están bien?

Código SQL:
Ver original
  1. DELIMITER $
  2.  
  3. CREATE PROCEDURE ejercicio1 ()
  4. BEGIN
  5.  
  6.     DECLARE SUM INT;
  7.     DECLARE cla CHAR;
  8.     DECLARE punt INT;
  9.     DECLARE var1 INT DEFAULT 2;
  10.    
  11.     SELECT SUM(tantos_marcados) AS tantos, clase
  12.     FROM jugadores
  13.     GROUP BY clase
  14.     ORDER BY tantos DESC;
  15.    
  16.     DECLARE cursor1 CURSOR FOR
  17.     SELECT SUM(tantos_marcados) AS tantos, j.clase, c.puntuacion
  18.     FROM jugadores AS j INNER JOIN clases AS c ON j.clase = c.codigo
  19.     GROUP BY j.clase
  20.     ORDER BY tantos DESC
  21.     LIMIT 2;
  22.    
  23.    /* DECLARE CONTINUE HANDLER FOR NOT FOUND SET @var1 = 0; */
  24.    
  25.     OPEN cursor1;
  26.    
  27.     IF var1 = 2 THEN
  28.     SET var1 = 1;
  29.     FETCH cursor1 INTO SUM, cla, punt;
  30.     SET punt = punt + 2;
  31.     UPDATE clases SET puntuacion = punt WHERE codigo = cla;
  32.     ELSE IF var1 = 1 THEN
  33.     SET var1 = 0;
  34.     FETCH cursor1 INTO SUM, cla, punt;
  35.     SET punt = punt + 1;
  36.     UPDATE clases SET puntuacion = punt WHERE codigo = cla;
  37.     END IF;
  38.    
  39.     CLOSE cursor1;
  40.    
  41. END$
  42.  
  43. DELIMITER ;