MySQL - TRIGGERS STOCK
Links
// TRIGGERS STOCK
create database ventas
go
use ventas
go
CREATE TABLE articulo
( idArticulo int primary key,
nombre varchar (100),
stock int
)
go
create trigger trNoStockNegativo on articulo for insert, update
as
declare @texto varchar(300)
if ( select stock from inserted ) < 0
begin
set @texto = 'El stock del "'+(select nombre from inserted)+'" no puede quedar negativo'
raiserror (@texto,16,1)
rollback transaction
end
go
create table venta
(
idventa int identity primary key,
idArticulo int references articulo(idArticulo),
cantidad int constraint "Tiene que vender algo" check (cantidad >0)
)
go
insert into articulo values ( 1,'Platano',10)
insert into articulo values ( 2,'Manzana',7)
insert into articulo values ( 3,'Pera',2)
go
create trigger trNuevaVenta on venta for insert
as
declare @idArticuloVendido int
declare @cantidad int
set @idArticuloVendido =(select idArticulo from INSERTED)
set @cantidad =(select cantidad from INSERTED)
update articulo set stock = stock - @cantidad where idArticulo = @idArticuloVendido
go
create trigger trBorrarventa on venta for delete
as
declare @idArticuloVendido int
declare @cantidad int
set @idArticuloVendido =(select idArticulo from DELETED)
set @cantidad =(select cantidad from DELETED)
update articulo set stock = stock + @cantidad where idArticulo =@idArticuloVendido
go
//-- modificar !!
create trigger trModificarVenta on venta for update
as
//-- eliminar venta anterior
declare @idArticuloVendido int
declare @cantidad int
set @idArticuloVendido =(select idArticulo from DELETED)
set @cantidad =(select cantidad from DELETED)
update articulo set stock = stock + @cantidad where idArticulo =@idArticuloVendido
//-- venta nueva
set @idArticuloVendido =(select idArticulo from INSERTED)
set @cantidad =(select cantidad from INSERTED)
update articulo set stock = stock - @cantidad where idArticulo = @idArticuloVendido
go
//-- todo en uno
create trigger trMantenerStock on venta for update,delete,insert
as
update articulo set stock = stock +(select cantidad from DELETED)
where idArticulo =(select idArticulo from DELETED)
update articulo set stock = stock -(select cantidad from INSERTED)
where idArticulo = (select idArticulo from INSERTED)