Problem with update Trigger PLPGSQL

Asked

Viewed 18 times

-1

I have a for a stock audit, the of it works, but the no, or it changes nothing or changes all records with the same item code. How can I adjust this part of the of 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

1 answer

0

Please specify the primary key of your tables:

Perhaps the code below will serve you.

UPDATE pcp.estoque_movimento As T
   SET T.entrada = NEW.saldo 
 Where T.prefixoproduto = NEW.prefixoproduto
   and T.id = NEW.id
   and T.id_departamento = NEW.id_departamento;
  • 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.

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

  • your problem still continues?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.