GARANTIR DESCONTO

Fórum Lançar um trigger numa tabela que der baixa em outra, como?? #55179

10/02/2006

0

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:


Paullsoftware

Paullsoftware

Responder

Posts

13/02/2006

Emerson Nascimento

na tabela Filmes_Locacao é lançado um registro para cada movimento do filme ou um registro existente é alterado?


Responder

Gostei + 0

15/02/2006

Paullsoftware

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...


Responder

Gostei + 0

15/02/2006

Emerson Nascimento

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



Responder

Gostei + 0

15/02/2006

Paullsoftware

valeu emerson.en vou testar hoje a noite em casa e retorno! :wink:


Responder

Gostei + 0

16/02/2006

Paullsoftware

valeu emerson.en

funcionou legal! :lol:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar