Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/11/2010, 07:06
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: cursor en mysql

El procedimiento no contiene errores sintácticos; lo que sí puede contener son errores de lógica o de comparaciones lógicas.
El SELECT que devuelve cantidades debe considerar que pueda devolver un NULL, y el NULL no es un dato, por lo que los operadores lógicos no funcionan con él. ISNUL() tampoco es funcional en este caso porque como sólo estás buscando un dato no devolverá registros en caso de ser NULL, por lo que no tendrás ningún campo con que usarlo.
Este tipo de dilema se resuelve simplemente con el IS NULL o IS NOT NULL.
Por las dudas, he incluido un IF más con dos condiciones, para cubrir la lógica que pareces querer aplicar:
Código MySQL:
Ver original
  1. -- --------------------------------------------------------------------------------
  2. -- Routine DDL
  3. -- --------------------------------------------------------------------------------
  4. DELIMITER $$
  5.  
  6. CREATE PROCEDURE `actualiza_todo_compra` (in compra int, in suma float,in tienda int)
  7.     DECLARE done INT DEFAULT 0;
  8.     DECLARE a,b INT;
  9.     DECLARE cantidad INT;
  10.     DECLARE cur1 CURSOR FOR SELECT cantidad, producto_id FROM detalle_compra_producto WHERE compra_id=compra AND vigencia=1;
  11.     DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  12.     OPEN cur1;
  13.  
  14.     REPEAT
  15.         FETCH cur1 INTO a, b;
  16.         IF NOT done THEN
  17.             SET cantidad=(SELECT cantidad FROM detalle_tienda_producto WHERE producto_id =b);
  18.             IF (cantidad IS NOT NULL) THEN
  19.                 IF CANTIDAD>0 THEN
  20.                     SET cantidad=cantidad+a;
  21.                     UPDATE detalle_tienda_producto SET cantidad=cantidad WHERE producto_id=b;
  22.                 ELSE
  23.                     INSERT INTO detalle_tienda_producto(cantidad,producto_id,tienda_id) VALUES (a,b,tienda);
  24.                 END IF;
  25.             ELSE
  26.                 INSERT INTO detalle_tienda_producto(cantidad,producto_id,tienda_id) VALUES (a,b,tienda);
  27.             END IF;
  28.         END IF;
  29.     UNTIL done END REPEAT;
  30.  
  31. CLOSE cur1;
  32.  
  33. END$$
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)