Ir ao conteúdo
  • Cadastre-se

SQL Server SQL - TRIGGER para baixar o estoque de um PRODUTO quando ele for vendido


Posts recomendados

poderiam me ajudar a criar um trigger para baixar o estoque de um produto quando ele for vendido.?

CODE<

use [pedidos]
go
/****** object:  table [dbo].[ex2_cliente]    
set ansi_nulls on
go
set quoted_identifier on
go
set ansi_padding on
go
create table [dbo].[ex2_cliente](
    [codcliente] [int] not null,
    [nome] [varchar](60) null,
    [datanascimento] [date] null,
    [cpf] [varchar](11) null,
 constraint [pk2_ex2_cliente] primary key clustered 
(
    [codcliente] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]

go
set ansi_padding off
go
/****** object:  table [dbo].[ex2_itempedido]   
set ansi_nulls on
go
set quoted_identifier on
go
create table [dbo].[ex2_itempedido](
    [codpedido] [int] not null,
    [numeroitem] [int] not null,
    [valorunitario] [decimal](10, 2) null,
    [quantidade] [int] null,
    [codproduto] [int] null,
 constraint [pk2_itempedido] primary key clustered 
(
    [codpedido] asc,
    [numeroitem] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]

go
/****** object:  table [dbo].[ex2_log]   
set ansi_nulls on
go
set quoted_identifier on
go
set ansi_padding on
go
create table [dbo].[ex2_log](
    [codlog] [int] identity(1,1) not null,
    [data] [date] null,
    [descricao] [varchar](255) null,
 constraint [pk2_ex2_log] primary key clustered 
(
    [codlog] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]

go
set ansi_padding off
go
/****** object:  table [dbo].[ex2_pedido]  
set ansi_nulls on
go
set quoted_identifier on
go
set ansi_padding on
go
create table [dbo].[ex2_pedido](
    [codpedido] [int] not null,
    [codcliente] [int] null,
    [datapedido] [date] null,
    [nf] [varchar](12) null,
    [valortotal] [decimal](10, 2) null,
 constraint [pk2_ex2_pedido] primary key clustered 
(
    [codpedido] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]

go
set ansi_padding off
go
/****** object:  table [dbo].[ex2_produto]   
set ansi_nulls on
go
set quoted_identifier on
go
set ansi_padding on
go
create table [dbo].[ex2_produto](
    [codproduto] [int] not null,
    [descricao] [varchar](100) null,
    [quantidade] [int] null,
 constraint [pk2_ex2_produto] primary key clustered 
(
    [codproduto] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]

go
set ansi_padding off
go
/****** object:  table [dbo].[ex2_requisicao_compra]  
set ansi_nulls on
go
set quoted_identifier on
go
create table [dbo].[ex2_requisicao_compra](
    [codrequisicaocompra] [int] not null,
    [codproduto] [int] null,
    [data] [date] null,
    [quantidade] [int] null,
 constraint [pk2_ex2_reqcompra] primary key clustered 
(
    [codrequisicaocompra] asc
)with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]
) on [primary]

go
insert [dbo].[ex2_cliente] ([codcliente], [nome], [datanascimento], [cpf]) values (1, n'sylvio barbon', cast(n'1984-12-05' as date), n'12315541212')
go
insert [dbo].[ex2_cliente] ([codcliente], [nome], [datanascimento], [cpf]) values (2, n'antonio carlos da silva', cast(n'1970-11-01' as date), n'12313345512')
go
insert [dbo].[ex2_cliente] ([codcliente], [nome], [datanascimento], [cpf]) values (3, n'thiago ribeiro', cast(n'1964-11-15' as date), n'12315544411')
go
insert [dbo].[ex2_cliente] ([codcliente], [nome], [datanascimento], [cpf]) values (4, n'carlos eduardo', cast(n'1924-10-25' as date), n'42515541212')
go
insert [dbo].[ex2_cliente] ([codcliente], [nome], [datanascimento], [cpf]) values (5, n'maria cristina goes', cast(n'1981-11-03' as date), n'67715541212')
go
insert [dbo].[ex2_cliente] ([codcliente], [nome], [datanascimento], [cpf]) values (6, n'ruan manoel fanjo', cast(n'1983-12-06' as date), n'32415541212')
go
insert [dbo].[ex2_cliente] ([codcliente], [nome], [datanascimento], [cpf]) values (7, n'patrícia marques', cast(n'1944-02-01' as date), n'77715541212')
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (1, 1, cast(10.90 as decimal(10, 2)), 1, 1)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (1, 2, cast(389.10 as decimal(10, 2)), 1, 3)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (2, 1, cast(10.90 as decimal(10, 2)), 1, 1)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (3, 1, cast(10.90 as decimal(10, 2)), 1, 1)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (4, 1, cast(10.90 as decimal(10, 2)), 1, 1)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (4, 2, cast(15.90 as decimal(10, 2)), 2, 2)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (4, 3, cast(25.50 as decimal(10, 2)), 1, 4)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (4, 4, cast(100.90 as decimal(10, 2)), 1, 5)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (5, 1, cast(100.90 as decimal(10, 2)), 1, 5)
go
insert [dbo].[ex2_itempedido] ([codpedido], [numeroitem], [valorunitario], [quantidade], [codproduto]) values (6, 1, cast(25.50 as decimal(10, 2)), 2, 4)
go
insert [dbo].[ex2_pedido] ([codpedido], [codcliente], [datapedido], [nf], [valortotal]) values (1, 1, cast(n'2012-04-01' as date), n'00001', cast(400.00 as decimal(10, 2)))
go
insert [dbo].[ex2_pedido] ([codpedido], [codcliente], [datapedido], [nf], [valortotal]) values (2, 2, cast(n'2012-04-01' as date), n'00002', cast(10.90 as decimal(10, 2)))
go
insert [dbo].[ex2_pedido] ([codpedido], [codcliente], [datapedido], [nf], [valortotal]) values (3, 2, cast(n'2012-04-01' as date), n'00003', cast(21.80 as decimal(10, 2)))
go
insert [dbo].[ex2_pedido] ([codpedido], [codcliente], [datapedido], [nf], [valortotal]) values (4, 3, cast(n'2012-05-01' as date), n'00004', cast(169.10 as decimal(10, 2)))
go
insert [dbo].[ex2_pedido] ([codpedido], [codcliente], [datapedido], [nf], [valortotal]) values (5, 4, cast(n'2012-05-01' as date), n'00005', cast(100.90 as decimal(10, 2)))
go
insert [dbo].[ex2_pedido] ([codpedido], [codcliente], [datapedido], [nf], [valortotal]) values (6, 6, cast(n'2012-05-02' as date), n'00006', cast(51.35 as decimal(10, 2)))
go
insert [dbo].[ex2_produto] ([codproduto], [descricao], [quantidade]) values (1, n'mouse', 10)
go
insert [dbo].[ex2_produto] ([codproduto], [descricao], [quantidade]) values (2, n'teclado', 10)
go
insert [dbo].[ex2_produto] ([codproduto], [descricao], [quantidade]) values (3, n'monitor lcd', 10)
go
insert [dbo].[ex2_produto] ([codproduto], [descricao], [quantidade]) values (4, n'caixas acústicas', 10)
go
insert [dbo].[ex2_produto] ([codproduto], [descricao], [quantidade]) values (5, n'scanner de mesa', 10)
go
alter table [dbo].[ex2_itempedido]  with check add  constraint [fk2_codpedido] foreign key([codpedido])
references [dbo].[ex2_pedido] ([codpedido])
go
alter table [dbo].[ex2_itempedido] check constraint [fk2_codpedido]
go
alter table [dbo].[ex2_itempedido]  with check add  constraint [fk2_itempedido_produto] foreign key([codproduto])
references [dbo].[ex2_produto] ([codproduto])
go
alter table [dbo].[ex2_itempedido] check constraint [fk2_itempedido_produto]
go
alter table [dbo].[ex2_pedido]  with check add  constraint [pk2_ex2_pedido_cliente] foreign key([codcliente])
references [dbo].[ex2_cliente] ([codcliente])
go
alter table [dbo].[ex2_pedido] check constraint [pk2_ex2_pedido_cliente]
go
alter table [dbo].[ex2_requisicao_compra]  with check add  constraint [fk2_ex2_reqcompra_produto] foreign key([codproduto])
references [dbo].[ex2_produto] ([codproduto])
go
alter table [dbo].[ex2_requisicao_compra] check constraint [fk2_ex2_reqcompra_produto]
go

>

Link para o comentário
Compartilhar em outros sites

Pelo que entendi do seu esquema, acho que seria o seguinte:

DELIMITER $

CREATE TRIGGER ex2_itempedido_tgr AFTER INSERT
ON ex2_itempedido
FOR EACH ROW
BEGIN	
	SELECT @qtd_atual = quantidade FROM ex2_produto WHERE codproduto = NEW.codproduto;
   	UPDATE ex2_produto SET quantidade = (@qtd_atual - NEW.quantidade) WHERE codproduto = NEW.codproduto;
END$

 

Fica o desafio pra você criar a trigger quando o item for devolvido ou o pedido cancelado e atualizar a quantidade do produto.

Dica: (AFTER DELETE OU AFTER UPDATE - Use os recursos OLD e NEW para ter acesso aos campos que estão sendo usados no momento.)

Link para o comentário
Compartilhar em outros sites

Po cara, eu fiz em mysql. Foi mal. Segue em mssql:

CREATE TRIGGER ex2_itempedido_trg  
ON ex2_itempedido 
AFTER INSERT  
AS  
  BEGIN
  DECLARE
    @codproduto INT,
    @qtdpedido INT

    SELECT @qtdpedido = quantidade, @codproduto = codproduto FROM INSERTED

   	UPDATE ex2_produto SET quantidade = quantidade - @qtdpedido WHERE codproduto = @codproduto;
  END
GO

Você tem uma espécie de tabela temporária (espelho da tabela afetada) com os registros inseridos (INSERTED), atualizados (UPDATED) ou deletados (DELETED). Sendo assim você pode fazer a atualização da quantidade na mesma trigger em cada operação. Nesse caso na linha "AFTER INSERT", ficaria "AFTER INSERT, UPDATE, DELETE" e voce faz o tratamento para cada situação.

 

Seria bom pensar em um campo "situacao" na tabela de pedido para indicar se o pedido foi cancelado, devolvido ou algo assim. E então no UPDATED voce faz o tratamento para repor essa quantidade no estoque. Desse modo não perde o registro do pedido.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...