Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: d91 en 15 Septiembre 2019, 18:57 pm



Título: Asignacion de variables a cursor mysql
Publicado por: d91 en 15 Septiembre 2019, 18:57 pm
Hola a todos, estoy tratando de auditar el incremento del stock del inventario al realizar una compra, pero no he logrado asignar la variable del where del cursor, al parecer en mysql no se pueden pasar variables como parametros a los cursores. Ya que cuando activo el cursor la variable v_producto esta vacia.

Código
  1. CREATE TRIGGER Compra_Producto AFTER INSERT ON `detalle_compra` FOR EACH ROW
  2.                BEGIN
  3.                    DECLARE v_stock INT;
  4.                    DECLARE v_cantidad INT;
  5.                    DECLARE v_total INT;
  6.                    DECLARE v_producto BIGINT;
  7.  
  8.                    DECLARE cursor_compra CURSOR FOR
  9.                        SELECT stock FROM inventario WHERE producto_id = v_producto;
  10.  
  11.                    SET @v_producto = NEW.producto_id;
  12.                    SET @v_cantidad = NEW.cantidad;
  13.  
  14.                    OPEN cursor_compra;
  15.  
  16.                    LOOP
  17.                        FETCH cursor_compra INTO v_stock;
  18.                    END LOOP;
  19.  
  20.                    CLOSE cursor_compra;
  21.  
  22.                    SET @v_total = v_stock + v_cantidad;
  23.  
  24.                    UPDATE inventario SET stock = v_total WHERE producto_id = v_producto;
  25.  
  26.                END
  27.  


Título: Re: Asignacion de variables a cursor mysql
Publicado por: d91 en 15 Septiembre 2019, 19:20 pm
Hola, lo logre resolver de una un poco más sencilla, pero estoy pensando como devolver una excepcion en caso de disminuir el inventario en caso la cantidad que se egresa sea mayor al stock existente
Código
  1. CREATE TRIGGER Compra_Producto AFTER INSERT ON `detalle_compra` FOR EACH ROW
  2.                BEGIN
  3.  
  4.                    UPDATE inventario SET stock = (stock + NEW.cantidad) WHERE producto_id = NEW.producto_id;
  5.  
  6.                END
  7.