5
respostas

PROBLEMAS EM CRIAR TRIGGERS

Estou tentando criar um sistema de estoque que envolve duas tabelas, a de estoque e a de vendas, com o objetivo de quando for feito um registro de venda a tabela de estoque seja automaticamente atualizada. Para fazer isso pensei em fazer um sistema simples usando uma trigger para pegar a chave primária e a quantidade inserida na última inclusão feita na tabela de vendas e passar esses dados para uma procedure que atualiza o estoque com eles. O problema é toda vez da erro de compilação ao criar a trigger. Códigos abaixo.

CREATE OR REPLACE TRIGGER TGR_VENDAS AFTER INSERT ON tb_vendas

begin

atualiza_estoque (new.SKU, new.QUANTIDADE);

end;

CREATE OR REPLACE PROCEDURE atualiza_estoque (p_SKU in varchar2, p_ESTOQUE IN integer)

is

begin

update tb_estoque SET ESTOQUE = (ESTOQUE - p_ESTOQUE) WHERE SKU = p_SKU  ;

COMMIT; end;

5 respostas

Olá Guilherme, tudo bem? Qual o banco de dados que você está utilizando? É o MySQL, ou SQL Server, ou Oracle ou outro? Fala pra gente assim podemos ti ajudar da melhor forma possível!

Fico aguardando retorno!

PL/SQL 18C express

Guilherme, nesse caso, você deseja alterar apenas 1 registro da tabela de estoque correto? Então acho que não tem a necessidade de criar uma PROCEDURE, você poderia simplesmente fazer tudo dentro da TRIGGER mesmo, para isso você poderia apenas colocar a linha onde você faz o UPDATE na tabela de estoque e colocar dentro do corpo da TRIGGER:

update tb_estoque SET ESTOQUE = (ESTOQUE - p_ESTOQUE) WHERE SKU = p_SKU;

Acho que é uma solução mais performática, já que é uma única ação e que depende dos valores que foram inseridos na tabela de vendas então acho que é mais indicado. Claro, a não ser que você precise reutilizar essa ação em outros lugares o que eu creio que não. Então tenta dessa forma e fala pra gente se funcionou!

No caso eu usei esse mesmo comando que você me recomendou, porém quando atualiza o valor fica negativo

Mas, você deve modificar um pouco o comando para funcionar com os seus campos, como não conheço o seu banco de dados é difícil dizer o porque do erro Guilherme, a questão é na TRIGGER, você deve capturar o registro que foi inserido e então modificar o campo estoque da tabela de estoque, tenta fazer usando essa lógica: Pegar o registro do produto (penso que seja isso) no caso é o SKU e depois usando esse identificador (com o WHERE) na tabela de estoque atualizar o estoque.