Fórum Stored procedure para atualizar outra tabela #54073

05/12/2005

0

Ola amigos. Venho aqui pedir mais uma vez sua ajuda.

bom é assim. tenho meu banco em interbase e utilizo para conexao componentes da palheta dbexpress.
Meu sistema é para controle de estoque de peças.
Tenho 2 tabelas. a primeira serve para mim cadastrar as peças.
a segunda é onde eu registro os movimentos de entrada ou saída, informando o codigo da peca e quantidade.

Quero que quando eu fizer um lançamento de entrada de peças, atualize o estoque desta determinada peça na outra tabela. e quando eu fizer um lançamento de saída de peças, atualize os estoque subtraindo a quantidade que foi dada baixa.

Qualquer duvida por favor podem perguntar. Obrigado a todos.


Wagsilvasilva

Wagsilvasilva

Responder

Post mais votado

05/12/2005

eis uma sugestão:
create procedure atualiza_estoque (
    id_produto integer,
    tipo_mov char(1),
    quantidade numeric(10,2))
returns (
    movimento_ok boolean)
as
begin
  if tipo_mov = ´E´ then
    update pecas set saldo = saldo + :quantidade where id_produto = :id_produto
  else
    update pecas set saldo = saldo - :quantidade where id_produto = :id_produto;

  if (rows_affected = 0) then
    movimento_ok = false
  else
    movimento_ok = true;

  suspend;
end


uma forma de executá-la seria através de triggers:
create trigger tgINCLUI_MOVIMENTO for movimento
active after insert position 0
as
begin
  atualiza_estoque( new.id_produto, new.tipo, new.quantidade );
end


create trigger tgEXCLUI_MOVIMENTO for movimento
active after delete position 0
as
begin
  if old.tipo = ´E´ then
    atualiza_estoque( old.id_produto, ´S´, old.quantidade )
  else
    atualiza_estoque( old.id_produto, ´E´, old.quantidade );
end


como você não informou nada sobre a estrutura das suas tabelas, eu utilizei:
pecas -> cadastro de pecas, que contém o saldo em estoque no campo SALDO, tendo como referência ao produto o campo ID_Produto

movimento -> onde constam os lançamentos no estoque, também com referência ao produto pelo campo ID_Produto e tendo ainda o campo Quantidade, onde consta a quantidade movimentada e o campo TIPO, onde é informado o tipo de movimento (´E´ para entrada ou ´S´ para saída).


Emerson Nascimento

Emerson Nascimento
Responder

Gostei + 2

Mais Posts

17/04/2016

Hermeson Gonçalves

boa noite. Gostei do seu exemplo. Gostaria de saber se esses comandos são para firebird ou que banco? pq estou tentando fazer pelo FB mas está dando erro.
Responder

Gostei + 0

18/04/2016

Emerson Nascimento

Hermeson, o exemplo é para FB, sim. Na época creio que era FB 1.5.

Publique o erro que está sendo apresentado para podermos ajudar na solução.

Aquela forma é prática, porque não é preciso preocupação com a atualização do saldo: basta incluir a movimentação que o próprio banco de dados faz o resto.
Responder

Gostei + 1

18/04/2016

Hermeson Gonçalves

Obrigado Emerson pela rápida resposta. Você tem algum tutorial para gerar as SP e Triggers? Por exemplo, uma vez criadas, onde eu implemento no Delphi? ou simplesmente o banco faz isso só? Sou um desenvolver intermediário, mas nessa parte de Banco, comecei a estudar a pouco tempo, especialmente essas regras. Obrigado mais uma vez.
Responder

Gostei + 0

18/04/2016

Emerson Nascimento

Da forma como está apresentado na resposta, basta incluir o registro de movimentação (entrada ou saída) e o banco de dados faz a atualização do saldo automaticamente.

Você também pode chamar a procedure "atualiza_estoque()" manualmente, no momento em que achar conveniente.

Infelizmente não tenho qualquer tutorial, mas você encontra com facilidade na internet. caso não encontro algo específico para sua necessidade, pergunte aqui no fórum. temos muitos colegas solidários que irão ajudar.
Responder

Gostei + 1

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

Aceitar