Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/04/2013, 11:41
wchiquito
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 12 años, 10 meses
Puntos: 42
Respuesta: Error de Cursor con While.

Hola xplertor,

Veo un problema en el SP que genera que parte de la lógica del mismo aplique solo al primer cliente, es en la línea:
Código MySQL:
Ver original
  1. WHILE Ano1 < ano_fin+1 DO
La variable se incrementa correctamente al primer cliente:
Código MySQL:
Ver original
  1. SET Ano1 = Ano1 + 1;
sin embargo, al pasar al segundo cliente, la variable "Ano1" no se asigna de nuevo al valor de "ano_ini", por lo que la condición (WHILE Ano1 < ano_fin+1 DO) no se cumple para el resto de clientes.

Una opción para solventar es:
Código MySQL:
Ver original
  1. ...
  2. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  3. /* SET Ano1 = ano_ini; */
  4.  
  5. OPEN cur1;
  6. curl:REPEAT
  7.    FETCH cur1 INTO CNo;
  8.    IF NOT done THEN
  9.       SET fc = 0;
  10.       SET Ano1 = ano_ini; /* Asignación para cada iteración del cursor */
  11.       WHILE Ano1 < ano_fin+1 DO
  12. ...
El problema:
Código MySQL:
Ver original
  1. Error Code: 1329
  2. No data - zero rows fetched, selected, or processed
puede ser originado al trata de leer el cursor y el mismo no tiene datos disponibles, en este caso el HANDLER debe manejar esa excepción.

Comparto la idea con gnzsoloyo de la posibilidad de solventer sin el uso del cursor.

Espero sea útil la información.