Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: d91 en 17 Enero 2017, 15:06 PM

Título: Declaracion de variables en trigger mysql
Publicado por: d91 en 17 Enero 2017, 15:06 PM
Hola, estoy tratando de crear un trigger para auditar el inventario a partir de las compras en una base de datos de MYSQL 5.7, (solo he trabajado PL sql y T-sql) pero me genera un error al compilar, esto en la sección de declaracion de variables, ya intente de muchas formas pero no me resulta, no se si me alguien pueda orientar para lograr correr el codigo
Código (sql) [Seleccionar]

CREATE TRIGGER Audit_Compra_Trigger
AFTER INSERT ON compra_detalle
FOR EACH ROW
BEGIN
DECLARE var_CurrentStock INTEGER;
DECLARE var_producto INTEGER;
DECLARE var_CurrentPrice DECIMAL(5,2);
DECLARE cur_Datos Cursor for Select CostoActual, Stock
from Inventario Where Producto_Id = var_producto;
SET var_producto = New.Producto_Id;

OPEN cur_Datos;
FETCH cur_Datos INTO var_CurrentPrice, var_CurrentStock;
CLOSE cur_Datos;

SET var_CurrentStock = var_CurrentStock + New.Cantidad;

Update Inventario
set CostoAnterior = var_CurrentPrice,
CostoActual = New.PrecioCosto,
PrecioSugerido = New.PrecioSugerido,
Stock = var_CurrentStock
Where Producto_Id = var_producto;
END

Título: Re: Declaracion de variables en trigger mysql
Publicado por: d91 en 18 Enero 2017, 13:19 PM
Soy nuevo con codigo almacenado Mysql pero lo hice funcionar con algunas lineas adicionales:
Código (sql) [Seleccionar]

DELIMITER $$
CREATE TRIGGER Audit_Compra_Trigger
AFTER INSERT ON compra_detalle
FOR EACH ROW
BEGIN
declare var_CurrentStock int DEFAULT 0;
DECLARE var_producto INT DEFAULT 0;
DECLARE var_CurrentPrice DECIMAL(5,2);
DECLARE cur_Datos Cursor for Select CostoActual, Stock
from Inventario Where Producto_Id = var_producto;

SET var_producto = New.Producto_Id;

OPEN cur_Datos;
FETCH cur_Datos INTO var_CurrentPrice, var_CurrentStock;
CLOSE cur_Datos;

SET var_CurrentStock = var_CurrentStock + New.Cantidad;

Update Inventario
SET CostoAnterior = var_CurrentPrice,
CostoActual = NEW.PrecioCosto,
PrecioSugerido = NEW.PrecioSugerido,
Stock = var_CurrentStock
where Producto_Id = NEW.Producto_Id;
END$$