Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2014, 09:05
Avatar de David_Carrera_G
David_Carrera_G
 
Fecha de Ingreso: noviembre-2014
Ubicación: Santiago
Mensajes: 37
Antigüedad: 9 años, 5 meses
Puntos: 1
Pregunta Bucle infinito

Hola estimados, desde hace unos días me encuentro con un problema en el trabajo, resulta que construí un procedimiento para realizar una consulta de resultados por meses, la cual he cambiado millones de veces para encontrar la solución, resulta que este SP realiza correctamente todo el proceso que conlleva, pero una vez llega al while queda iterando de manera infinita un UPDATE que le estoy pasando, dejo el código de ejemplo para que me puedan ayudar, se los agradecería mucho. Saludos.

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS db_dtv.SALIDA_MES;
  2. CREATE PROCEDURE db_dtv.`SALIDA_MES`()
  3.  
  4. DECLARE valormax int;
  5. DECLARE valormin int;
  6. DECLARE cont int;
  7.  
  8.  
  9. DROP TABLE IF EXISTS estructura;
  10. CREATE TABLE estructura
  11. SELECT 'ID','MES','DIRECCION','AREA','RESPONSABLE','SUB_CATEGORIA','ENERO','FEBRERO','MARZO','ABRIL','MAYO','JUNIO','JULIO','AGOSTO','SEPTIEMBRE','OCTUBRE',
  12. 'NOVIEMBRE','DICIEMBRE';
  13.  
  14. TRUNCATE estructura;
  15.  
  16. INSERT INTO estructura(MES,DIRECCION,AREA,RESPONSABLE,SUB_CATEGORIA)
  17. SELECT MONTH(a.fecha_real),b.Direccion,b.Area,b.responsable,a.SUBCATEGORIA_SECUNDARIA
  18. FROM almacen_contacto_paso a, tmp_contacto_resp b
  19. WHERE a.cod_subcategoria_secundaria= b.`Cod Contacto`
  20. AND a.cod_categoria=855
  21. GROUP BY a.SUBCATEGORIA_SECUNDARIA,MONTH(a.fecha_real),b.Responsable,b.Area
  22. ORDER BY b.area,a.subcategoria_secundaria,MONTH(a.fecha_real) asc;
  23.  
  24. SELECT 'id_num','MES';
  25.  
  26. SET valormax=12;
  27. SET c =1;
  28. SET valormin = 1;
  29.  
  30.  
  31.  WHILE valormin <= valormax DO
  32.  
  33.       TRUNCATE num;
  34.  
  35.       INSERT INTO num(MES)
  36.       SELECT COUNT(a.CONTACTO_IBS)
  37.       FROM almacen_contacto_paso a, tmp_contacto_resp b
  38.       WHERE a.cod_subcategoria_secundaria= b.`Cod Contacto`
  39.       AND a.cod_categoria=855
  40.       AND a.ID_IDENTIFICADOR = valormin
  41.       GROUP BY  a.SUBCATEGORIA_SECUNDARIA,MONTH(a.fecha_real),b.Responsable,b.Area
  42.       ORDER BY b.area,a.subcategoria_secundaria,MONTH(a.fecha_real) asc;
  43.  
  44.     IF(valormin = 1) THEN
  45.              
  46.       UPDATE estructura e, num n
  47.       SET e.ENERO = n.MES
  48.       WHERE e.ID = n.id_num;
  49.  
  50.      
  51.       ELSEIF(valormin = 2) THEN
  52.    
  53.      
  54.       ELSEIF(valormin = 3) THEN
  55.       UPDATE estructura e, num n
  56.       SET e.FEBRERO = n.MES
  57.       WHERE e.ID = n.id_num;
  58.      
  59.          
  60.      
  61.      ELSEIF(valormin = 4) THEN
  62.  
  63.       UPDATE estructura e, num n
  64.       SET e.MARZO = n.MES
  65.       WHERE e.ID = n.id_num;
  66.        
  67.      
  68.      ELSEIF(valormin = 5) THEN
  69.       UPDATE estructura e, num n
  70.       SET e.MAYO = n.MES
  71.       WHERE e.ID = n.id_num;
  72.        
  73.    
  74.      ELSEIF(valormin = 6) THEN
  75.  
  76.       UPDATE estructura e, num n
  77.       SET e.JUNIO = n.MES
  78.       WHERE e.ID = n.id_num;
  79.      
  80.      
  81.      ELSEIF (valormin = 7) THEN
  82.  
  83.       UPDATE estructura e, num n
  84.       SET e.JULIO = n.MES
  85.       WHERE e.ID = n.id_num;  
  86.        
  87.      
  88.      ELSEIF (valormin = 8) THEN        
  89.      
  90.       UPDATE estructura e, num n
  91.       SET e.AGOSTO = n.MES
  92.       WHERE e.ID = n.id_num;
  93.        
  94.      
  95.      ELSEIF(valormin = 9) THEN
  96.  
  97.       UPDATE estructura e, num n
  98.       SET e.SEPTIEMBRE = n.MES
  99.       WHERE e.ID = n.id_num;
  100.          
  101.      
  102.      ELSEIF(valormin = 10) THEN
  103.  
  104.       UPDATE estructura e, num n
  105.       SET e.OCTUBRE = n.MES
  106.       WHERE e.ID = n.id_num;
  107.          
  108.      
  109.      ELSEIF(valormin = 11) THEN
  110.       UPDATE estructura e, num n
  111.       SET e.NOVIEMBRE = n.MES
  112.       WHERE e.ID = n.id_num;
  113.        
  114.      
  115.      ELSEIF(valormin = 12) THEN
  116.  
  117.       UPDATE estructura e, num n
  118.       SET e.DICIEMBRE = n.MES
  119.       WHERE e.ID = n.id_num;  
  120.      
  121.      
  122.     END IF;
  123.    
  124.  
  125.  
  126. SET valorminimo = valorminimo +1;  
  127. END WHILE;    
  128.        
  129. select * from estructura;
  130. select * from num;
  131.  
__________________
David Carrera González
Santiago de Chile
Analista de base de datos