Fórum Lançar um trigger numa tabela que der baixa em outra, como?? #55179
10/02/2006
0
O meu problema é bem simples, não sei trabalhar com SP nem Triggers (ainda estou aprendendo), mais vamos lá...
Eu tenho um sistema de locadora e preciso dar baixa no acervo do filme quando ele é locado, hoje eu faço pelo delphi (AcervoEstoque.Value := AcervoEstoque.Value – 1) quando é locado e (AcervoEstoque.Value := AcervoEstoque.Value + 1) quando é devolvido, mais gostaria de fazer isso pelo próprio banco para melhorar a performance e ver se pára de dar erro no estoque que as vezes fica com -1...
Eu quero o seguinte:
Vamos supor que tenho essas tabelas no meu banco:
Acervo
Codigo, Titulo, Genero, Categoria, Estoque...
Locacao
Codig, Cliente, DataSaida, DataRetorno, Reajuste, Multa, Total_1, Total_2...
Filmes_Locacao
Codigo, CodLocacao, Filme, Diaria, Devolucao, Devolvido(varchar(1))
O campo Devolvido da tabela Filmes_Locacao recebe o valor S quando foi devolvido e N quando esta locado, daí quero o seguinte:
Criar uma SP que verifique se foi lançado um filme na tabela Filmes_Locacao com o valor ‘S’ ou ‘N’e Pegue o valor do estoque na tabela Acervo e subtraia menos 1 quando for ‘S’ e some 1 quando o valor for ‘N’...
Sei que terei que fazer um SP que será lançada por um trigger mais não sei como fazer isso. Um forcinha seria bem vinda, pelo menos algum material falando sobre como trabalho com SP e Triggers que tento desenrolar o resto por aqui!
:wink:
Paullsoftware
Curtir tópico
+ 0Posts
13/02/2006
Emerson Nascimento
Gostei + 0
15/02/2006
Paullsoftware
No momento de fazer a locação é lançado...
No momento dae fazer a Devolução é alterado...
Gostei + 0
15/02/2006
Emerson Nascimento
CREATE TRIGGER NOME_DA_TRIGGER FOR FILMES_LOCACAO ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0 AS begin /* se estiver inserindo ou atualizando o registro */ if (inserting or updating) then begin if (new.devolvido <> coalesce(old.devolvido,´X´)) then begin if (new.devolvido = ´S´) then update acervo set estoque = estoque + 1 where codigo = old.codigo; else update acervo set estoque = estoque - 1 where codigo = old.codigo; end end /* no caso de deletar o registro */ else begin if (old.devolvido = ´S´) then update acervo set estoque = estoque - 1 where codigo = old.codigo; else update acervo set estoque = estoque + 1 where codigo = old.codigo; end end
Gostei + 0
15/02/2006
Paullsoftware
Gostei + 0
16/02/2006
Paullsoftware
funcionou legal! :lol:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)