Ver Mensaje Individual
  #8 (permalink)  
Antiguo 06/01/2015, 08:24
jfloresga
 
Fecha de Ingreso: enero-2014
Mensajes: 17
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Ejecutar Store Procedure (MySQL)

Aquí el código del SP .... gracias


Código HTML:
CREATE DEFINER=`root`@`localhost` PROCEDURE `tabla_posiciones`(in par_cliente int, in par_sucursal int, in par_torneo int, in par_jornada int)
begin

  DECLARE vn_equipo INT;
  DECLARE vn_jornada INT;
  DECLARE vn_numjueg INT;
  DECLARE vn_equipo_vs INT;
  DECLARE vn_jj INT DEFAULT 0;
  DECLARE vn_marcador1 INT;
  DECLARE vn_marcador2 INT;
  DECLARE vn_jg INT DEFAULT 0;
  DECLARE vn_je INT DEFAULT 0;
  DECLARE vn_jp INT DEFAULT 0;
  DECLARE vn_gf INT DEFAULT 0;
  DECLARE vn_ge INT DEFAULT 0;
  DECLARE vn_puntos INT DEFAULT 0;
  DECLARE done INT DEFAULT 0;    
  /* Cursor de Tabla Temporal */
  DECLARE barre_temporal CURSOR FOR
         SELECT id_equipo
		 FROM tabla_pos;
  /* Cursor para barrer los partidos */
  DECLARE barre_partidos CURSOR FOR
          SELECT a.id_jornada, a.id_juego
          FROM encuentro as a, calendario as b
	      WHERE a.id_cliente = par_cliente AND a.id_sucursal = par_sucursal AND
                a.id_torneo  = par_torneo AND a.id_jornada <= par_jornada AND a.id_equipo = vn_equipo AND
                b.id_cliente = a.id_cliente AND b.id_sucursal = a.id_sucursal AND
                b.id_torneo = a.id_torneo AND b.id_jornada = a.id_jornada AND b.id_juego = a.id_juego AND
                b.cal_estatus = 1;

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

  DROP TEMPORARY TABLE IF EXISTS tabla_pos;
  -- Crea tabla Temporal, con los equipos correspondientes según paramétros
  -- Las columnas siguientes de "puntos", son las necesarias para el tratamiento de la promoción de JUMEX
  CREATE TEMPORARY TABLE tabla_pos AS
       SELECT id_equipo,0 as jj,0 as jg,0 as je,0 as jp,0 as gf,0 as ge,0 as puntos, 0 goles, 0 diferencia, 0 num_juego, 0 adeudo
	   FROM equipo
       WHERE id_cliente = par_cliente AND id_sucursal = par_sucursal AND id_torneo = par_torneo AND equ_estatus = 'A';
  
  SET SQL_SAFE_UPDATES=0;
  OPEN barre_temporal;
  read_loop: LOOP
     /* barre equipos de la temporal */
     FETCH barre_temporal INTO vn_equipo;
     If done THEN
        LEAVE read_loop;
     END IF;
     OPEN barre_partidos;
     read_partidos: LOOP
        /* Barre los partidos del equipo en curso */
        FETCH barre_partidos INTO vn_jornada, vn_numjueg;
        If done THEN
           LEAVE read_partidos;
        End If;
		/* Incrementa el contador de número de juegos */
        SET vn_jj = vn_jj + 1;
        /* Determina el equipo contrario */
		SET vn_equipo_vs = (SELECT id_equipo
							FROM encuentro
							WHERE id_equipo <>  vn_equipo and id_cliente = par_cliente and id_sucursal = par_sucursal and id_torneo = par_torneo and id_jornada = vn_jornada and id_juego = vn_numjueg) ;
        /* Determina Marcadores de ambos equipos */
        SET vn_marcador1 = (SELECT  IfNull(SUM(detalle_encuentro.denc_gol),0)
                            FROM detalle_encuentro
                            WHERE id_cliente = par_cliente AND
								  id_sucursal= par_sucursal AND
								  id_torneo  = par_torneo AND
								  id_jornada = vn_jornada AND
								  id_juego   = vn_numjueg AND
                                  id_equipo  = vn_equipo);
        SET vn_marcador2 = (SELECT  IfNull(SUM(detalle_encuentro.denc_gol),0)
                            FROM detalle_encuentro
                            WHERE id_cliente = par_cliente AND
								  id_sucursal= par_sucursal AND
								  id_torneo  = par_torneo AND
								  id_jornada = vn_jornada AND
								  id_juego   = vn_numjueg AND
                                  id_equipo  = vn_equipo_vs);
        IF vn_marcador1 = vn_marcador2 Then
           SET vn_je = vn_je + 1;
           SET vn_puntos = vn_puntos + 1;
        END IF;
        If vn_marcador1 > vn_marcador2 Then
           SET vn_jg = vn_jg + 1;
		   SET vn_puntos = vn_puntos + 3;
        END IF;
        If vn_marcador2 > vn_marcador1 Then
		   SET vn_jp = vn_jp + 1;
        END IF;
	    SET vn_gf = vn_gf + vn_marcador1;
	    SET vn_ge = vn_ge + vn_marcador2;
		/* Sólo si la jornada es igual a la del párametro de entrada, se graban los marcadores*/
        If vn_jornada = par_jornada Then
		   UPDATE tabla_pos
           SET goles = vn_marcador1, num_juego = vn_numjueg
           WHERE id_equipo = vn_equipo;
		   UPDATE tabla_pos
           SET goles = vn_marcador2, num_juego = vn_numjueg
           WHERE id_equipo = vn_equipo_vs;
        END IF;
     END LOOP;   
     CLOSE barre_partidos;
     UPDATE tabla_pos
     SET jj = vn_jj, jg = vn_jg, je = vn_je, jp = vn_jp, gf = vn_gf, ge = vn_ge, puntos = vn_puntos
     WHERE id_equipo = vn_equipo;
	 SET vn_jj = 0;
     SET vn_je = 0;
	 SET vn_puntos = 0;
     SET vn_jp = 0;
     SET vn_jg = 0;
     SET vn_gf = 0;
     SET vn_ge = 0;
     SET done = 0;
  END LOOP;
  CLOSE barre_temporal;
  SET vn_jornada = premio_jumex(par_cliente,par_sucursal,par_torneo);
  
  SELECT equipo.equ_nombre, tabla_pos.jj, tabla_pos.jg, tabla_pos.je,
         tabla_pos.jp, tabla_pos.gf, tabla_pos.ge, (tabla_pos.gf - tabla_pos.ge) as 'dif', tabla_pos.puntos
  FROM tabla_pos, equipo
  WHERE equipo.id_cliente = par_cliente AND equipo.id_sucursal = par_sucursal AND
        equipo.id_torneo = par_torneo AND equipo.id_equipo = tabla_pos.id_equipo
  ORDER BY 9 DESC,8 DESC;
  
END