Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

cursor en mysql

Estas en el tema de cursor en mysql en el foro de Mysql en Foros del Web. hola a todos, xfavor ayudenme, tengo el siguiente cursor: -- -------------------------------------------------------------------------------- -- Routine DDL -- -------------------------------------------------------------------------------- DELIMITER // CREATE PROCEDURE `corporac_burmes`.`actualiza_todo_compra` (in compra int, in ...
  #1 (permalink)  
Antiguo 13/11/2010, 18:44
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 13 años, 5 meses
Puntos: 0
cursor en mysql

hola a todos, xfavor ayudenme, tengo el siguiente cursor:

-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER //

CREATE PROCEDURE `corporac_burmes`.`actualiza_todo_compra` (in compra int, in suma float,in tienda int)
BEGIN

DECLARE done INT DEFAULT 0;
DECLARE a,b INT;
DECLARE cantidad INT;
DECLARE cur1 CURSOR FOR SELECT cantidad,producto_id FROM detalle_compra_producto where compra_id=compra and vigencia=1;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cur1;


REPEAT
FETCH cur1 INTO a, b;

IF NOT done THEN
set cantidad=(select cantidad from detalle_tienda_producto where producto_id =b);

IF isset(cantidad) THEN
set cantidad=cantidad+a;
update detalle_tienda_producto set cantidad=cantidad where producto_id=b;
ELSE
INSERT INTO detalle_tienda_producto (cantidad,producto_id,tienda_id) VALUES (a,b,tienda);
END IF;
END IF;
UNTIL done END REPEAT;

CLOSE cur1;



END//



no encuentro el error, xfavor recien toy implementando esto de cursor, para poder actualizar, pero no me sale nada :S
  #2 (permalink)  
Antiguo 13/11/2010, 19:21
Avatar de 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

A mi no me consta que la función ISSET() exista en MySQL...

¿No estarás mezclando PHP con MySQL?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 13/11/2010, 20:02
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: cursor en mysql

tienes razon, haber buscare eso, ok , gracias...
  #4 (permalink)  
Antiguo 13/11/2010, 20:04
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: cursor en mysql

Le qite el isset, ahora quedaria asi, ayuda xfa... aun siue sin dar


-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER //

CREATE PROCEDURE `corporac_burmes`.`actualiza_todo_compra` (in compra int, in suma float,in tienda int)
BEGIN

DECLARE done INT DEFAULT 0;
DECLARE a,b INT;
DECLARE cantidad INT;
DECLARE cur1 CURSOR FOR SELECT cantidad,producto_id FROM detalle_compra_producto where compra_id=compra and vigencia=1;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

OPEN cur1;


REPEAT
FETCH cur1 INTO a, b;

IF NOT done THEN
set cantidad=(select cantidad from detalle_tienda_producto where producto_id =b);

IF (cantidad>=0) THEN
set cantidad=cantidad+a;
update detalle_tienda_producto set cantidad=cantidad where producto_id=b;
ELSE
INSERT INTO detalle_tienda_producto (cantidad,producto_id,tienda_id) VALUES (a,b,tienda);
END IF;
END IF;
UNTIL done END REPEAT;

CLOSE cur1;



END//
  #5 (permalink)  
Antiguo 13/11/2010, 21:12
 
Fecha de Ingreso: noviembre-2010
Mensajes: 100
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: cursor en mysql

q error sera
  #6 (permalink)  
Antiguo 14/11/2010, 07:06
Avatar de 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)

Etiquetas: cursor, productos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:14.