Lançar um trigger numa tabela que der baixa em outra, como??
E ai galera blz...
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:
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
Curtidas 0
Respostas
Emerson Nascimento
10/02/2006
na tabela Filmes_Locacao é lançado um registro para cada movimento do filme ou um registro existente é alterado?
GOSTEI 0
Paullsoftware
10/02/2006
na tabela Filmes_Locacao é lançado um registro para cada movimento do filme ou um registro existente é alterado?
No momento de fazer a locação é lançado...
No momento dae fazer a Devolução é alterado...
GOSTEI 0
Emerson Nascimento
10/02/2006
tente assim:
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
Paullsoftware
10/02/2006
valeu emerson.en vou testar hoje a noite em casa e retorno! :wink:
GOSTEI 0
Paullsoftware
10/02/2006
valeu emerson.en
funcionou legal! :lol:
funcionou legal! :lol:
GOSTEI 0