Trigger para Atualizar Tabela de Estoque
Olá galera,
Sou novo por aqui e novato também na área de programação (Java) e SQL (PostgreSQL). Escolhi Java pela Versatilidade e portabilidade e o PostgreSQL por ser o melhor entre os SGBDS Free. Minha dúvida é a seguinte: Apesar de já ter lido vários artigos (inclusive a documentação do PosgreSQL) e assistido várias vídeo aulas sobre o assunto Trigger (a maioria para o MySQL), minha dúvida permanece. Estou desenvolvendo um mini aplicativo (em java) para controle de estoque com as seguintes tabelas: Produtos, Entradas, Saídas e Estoque (Resumindo). Na minha tela de produtos possuo um campo para mostrar o estoque desse produto, que deverá ser consultado na tabela estoques. Por sua vez, a tabela estoques deverá ser alimentada pelas entradas e saídas. A cada nova linha inserida nas tabelas entradas e saídas, deverá ser disparada uma trigger que deverá chamar a função para incrementar meu estoque (Entradas) ou decrementar meu estoque (Saídas). Como posso fazer isso? Como informar à função que ela deverá pegar o saldo existente na tabela estoques e somar ou subtrair uma quantidade que foi lançada na tabela entrada ou saída? Espero ter sido claro! Preciso de algumas dicas e a partir daí pretendo me virar sozinho. Conto com a colaboração de todos! Obrigado
Sou novo por aqui e novato também na área de programação (Java) e SQL (PostgreSQL). Escolhi Java pela Versatilidade e portabilidade e o PostgreSQL por ser o melhor entre os SGBDS Free. Minha dúvida é a seguinte: Apesar de já ter lido vários artigos (inclusive a documentação do PosgreSQL) e assistido várias vídeo aulas sobre o assunto Trigger (a maioria para o MySQL), minha dúvida permanece. Estou desenvolvendo um mini aplicativo (em java) para controle de estoque com as seguintes tabelas: Produtos, Entradas, Saídas e Estoque (Resumindo). Na minha tela de produtos possuo um campo para mostrar o estoque desse produto, que deverá ser consultado na tabela estoques. Por sua vez, a tabela estoques deverá ser alimentada pelas entradas e saídas. A cada nova linha inserida nas tabelas entradas e saídas, deverá ser disparada uma trigger que deverá chamar a função para incrementar meu estoque (Entradas) ou decrementar meu estoque (Saídas). Como posso fazer isso? Como informar à função que ela deverá pegar o saldo existente na tabela estoques e somar ou subtrair uma quantidade que foi lançada na tabela entrada ou saída? Espero ter sido claro! Preciso de algumas dicas e a partir daí pretendo me virar sozinho. Conto com a colaboração de todos! Obrigado
Ramiro Pamponet
Curtidas 0
Respostas
Bruno Leandro
03/05/2012
no postgre voce precisa criar uma chamada a uma função, com o nome da trigger tabela_trigger em quais eventos irá chamar a função para o tratamento INSERT OR UPDATE OR DELETE em qual tabela e qual função irá tratar estas ocorrencias, fn_tabela_trigger
CREATE TRIGGER tabela_trigger AFTER INSERT OR UPDATE OR DELETE ON tabela FOR EACH ROW EXECUTE PROCEDURE fn_tabela_trigger();
CREATE OR REPLACE FUNCTION fn_tabela_trigger() RETURNS Trigger AS
$BODY$
BEGIN
IF (TG_OP = DELETE) THEN
-- ao deletar uma compra incrementar o estoque
ELSIF (TG_OP = UPDATE) THEN
-- ao atualizar uma compra e o numero de produtos foi alterado incrementar ou decrementar o estoque
ELSIF (TG_OP = INSERT) THEN
-- ao inserir uma compra descontar o estoque
END IF;
END;
$BODY$
LANGUAGE plpgsql;
caso a duvida persista estamos a disposição
CREATE TRIGGER tabela_trigger AFTER INSERT OR UPDATE OR DELETE ON tabela FOR EACH ROW EXECUTE PROCEDURE fn_tabela_trigger();
CREATE OR REPLACE FUNCTION fn_tabela_trigger() RETURNS Trigger AS
$BODY$
BEGIN
IF (TG_OP = DELETE) THEN
-- ao deletar uma compra incrementar o estoque
ELSIF (TG_OP = UPDATE) THEN
-- ao atualizar uma compra e o numero de produtos foi alterado incrementar ou decrementar o estoque
ELSIF (TG_OP = INSERT) THEN
-- ao inserir uma compra descontar o estoque
END IF;
END;
$BODY$
LANGUAGE plpgsql;
caso a duvida persista estamos a disposição
GOSTEI 0
Glêsio Santos
03/05/2012
Sei que este post é bem antigo, mais a minha duvida esta de como pegar o valor antigo da minha tabela do banco para subtrair com o campo da minha tabela ou passa um paramentro para saber a quantidade que esta sendo solicitada
GOSTEI 0
Marisiana Battistella
03/05/2012
Olá Glêsio!
Vc tem que utilizar as variáveis OLD e NEW.
Veja o exemplo que retirei deste link: [url]http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html[/url]
Espero que ajude!
Vc tem que utilizar as variáveis OLD e NEW.
Veja o exemplo que retirei deste link: [url]http://www.postgresql.org/docs/9.2/static/plpgsql-trigger.html[/url]
CREATE TABLE emp ( empname text NOT NULL, salary integer ); CREATE TABLE emp_audit( operation char(1) NOT NULL, stamp timestamp NOT NULL, userid text NOT NULL, empname text NOT NULL, salary integer ); CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$ BEGIN -- -- Create a row in emp_audit to reflect the operation performed on emp, -- make use of the special variable TG_OP to work out the operation. -- IF (TG_OP = 'DELETE') THEN INSERT INTO emp_audit SELECT 'D', now(), user, OLD.*; RETURN OLD; ELSIF (TG_OP = 'UPDATE') THEN INSERT INTO emp_audit SELECT 'U', now(), user, NEW.*; RETURN NEW; ELSIF (TG_OP = 'INSERT') THEN INSERT INTO emp_audit SELECT 'I', now(), user, NEW.*; RETURN NEW; END IF; RETURN NULL; -- result is ignored since this is an AFTER trigger END; $emp_audit$ LANGUAGE plpgsql; CREATE TRIGGER emp_audit AFTER INSERT OR UPDATE OR DELETE ON emp FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();
Espero que ajude!
GOSTEI 0
Glêsio Santos
03/05/2012
Ola Marisiana, desculpa pela demora, mais muito obrigado pela ajuda, consegui realizar as operações com seus exemplos e o link me ajudou a compreender mais sobre trigger
Agradeço
Agradeço
GOSTEI 0
Marisiana Battistella
03/05/2012
Por nada!!
Fico feliz que tenha ajudado!
Fico feliz que tenha ajudado!
GOSTEI 0
Ariclenes Maciel
03/05/2012
Ola eu gostaria de Saber como é que posso tirar um orçamento sem descontar a quantidade no estoque
obrigado
obrigado
GOSTEI 0