Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/03/2014, 10:56
maregeo
 
Fecha de Ingreso: junio-2013
Mensajes: 13
Antigüedad: 10 años, 10 meses
Puntos: 0
pasar array y crear cursor

Estoy intentando pasar una array a un procedimiento almacenado el cual, por medio de un cursor, me devuelva unos subtotales.

El caso es que el cursor solo me coge el último valor del array que le paso.

He revisado muchas veces el código, pero estoy ofuscado. Agradeceria sugerencias.

Código MySQL:
Ver original
  1.  
  2. DECLARE v_contrato_id int(4);
  3. DECLARE v_ano_an int(4);
  4. DECLARE v_ano_ac int(4);
  5. DECLARE v_enero int(4);
  6.  
  7. DECLARE cur1 CURSOR FOR    select contrato_id,
  8. count(case when  `fecha_cierre`  BETWEEN "2013-01-01" AND "2013-12-31" then 1 else null end ) as ano_an,
  9. count(case when  `fecha_cierre`  BETWEEN "2014-01-01" AND "2014-12-31" then 1 else null end ) as ano_ac,
  10. COUNT(case when `fecha_cierre`  BETWEEN "2014-01-01" AND "2014-01-31" then 1 else null end ) as enero
  11. from 080_acciones
  12. where contrato_id=@currentValue;
  13.  
  14. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  15.  
  16. SET @separator = ',';
  17. SET @separatorLength = CHAR_LENGTH(@separator);
  18.  
  19. WHILE _passedArray != '' > 0 DO
  20.     SET @currentValue = SUBSTRING_INDEX(_passedArray, @separator, 1);
  21.         OPEN cur1; 
  22.         read_loop: LOOP
  23.         FETCH  cur1 INTO v_contrato_id, v_ano_an, v_ano_ac,v_enero;
  24.         IF done THEN LEAVE read_loop;       END IF;END LOOP;   
  25.         CLOSE cur1;    
  26.     SET _passedArray = SUBSTRING(_passedArray, CHAR_LENGTH(@currentValue) + @separatorLength + 1);
  27. END WHILE;
  28. Select v_contrato_id, v_ano_an, v_ano_ac,v_enero;

Última edición por gnzsoloyo; 10/03/2014 a las 11:35