-1
I have a Trigger for a stock audit, the Insert of it works, but the update no, or it changes nothing or changes all records with the same item code. How can I adjust this part of the Where of update only to change the last record that was edited?
tabelas
**Estoques**
id
id_produto
id_departamento
saldo
data
hora
prefixoproduto
**estoque_movimento**
id
id_departamento
entrada
saida
data
hora
prefixoproduto
CREATE TRIGGER t_auditoria_estoque
AFTER INSERT OR UPDATE ON pcp.estoques
FOR EACH ROW
EXECUTE PROCEDURE auditoria_estoque();
CREATE OR REPLACE FUNCTION auditoria_estoque() RETURNS TRIGGER
AS
$$
BEGIN
IF (TG_OP = 'INSERT') THEN
INSERT INTO pcp.estoque_movimento (id_departamento,entrada,data,hora,prefixoproduto)
VALUES (new.id_departamento,new.saldo,current_date,current_time,new.prefixoproduto);
RETURN NEW;
ELSE
IF new.saldo <> old.saldo
THEN
UPDATE pcp.estoque_movimento
SET entrada = NEW.saldo
where prefixoproduto = NEW.prefixoproduto
and id=old.id;
RETURN NEW;
END IF;
END IF;
END;
$$ LANGUAGE PLPGSQL
I tried to change it to old.id or new.id and it doesn’t work
Ricardo then the primary key of the two are the ID, they have no specific link, I managed to make it work in a way but I do not know if it is right because it only worked when I deleted all data from the two tables.
– Camila Gabrielly Gonçalves

BEGIN
 IF (TG_OP = 'INSERT') THEN
 INSERT INTO pcp.estoque_movimento (id_departamento,entrada,data,hora,prefixoproduto)
 VALUES (new.id_departamento,new.saldo,current_date,current_time,new.prefixoproduto);
 RETURN NEW;
 ELSE
 IF new.saldo <> old.saldo
 THEN
 UPDATE pcp.estoque_movimento 
 SET entrada = NEW.saldo 
 where prefixoproduto = NEW.prefixoproduto
 and id=old.id;
 RETURN NEW;
 END IF;
 END IF;
 
END;

– Camila Gabrielly Gonçalves
your problem still continues?
– Ricardo F. Rodrigues