Hola a todos
Estoy trabajando intentando actualizar los valores de dos tablas (a_fer con un update , a_fer 2 con insert ) con los valores updateados de una tercera tabla (a _lote) con el siguiente funcionamiento
1) Realizo un update de un registro del campo estado de a_lote
2) Actualizar los valores del campo estado=33 de la tabla a_fer .
Mi trigger actual actualiza todos los valores del campo estado de la tabla a_fer con los valores de la tabla a_lote y yo solo quiero que actualice los valores que han cambiado en a_lote.
¿Cómo puedo establecer una restricción para que solo actualice los valores que han sido updateados en a_lote?
-- Function: update()
-- DROP FUNCTION update();
CREATE OR REPLACE FUNCTION update()
RETURNS trigger AS
$BODY$BEGIN
UPDATE a_fer SET estado=a_lote.estado FROM a_lote WHERE a_fer.id_ofi_loc=a_lote.id_ofi_loc;
RETURN NEW;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION update()
OWNER TO postgres;
-- Trigger: tr_lote_update on a_lote
-- DROP TRIGGER tr_lote_update ON a_lote;
CREATE TRIGGER tr_lote_update
AFTER UPDATE OF estado
ON a_lote
FOR EACH ROW
WHEN ((new.estado = 33))
EXECUTE PROCEDURE update();
3) Insertar los valores que han sido updateados en la tabla a_fer en la tabla a_fer2?
Mi trigger actual inserta a todos los valores de la tabla a_fer en la tabla a_fer2
¿Cómo puedo conseguir que solo inserte los valores que han updateados en a_fer?. -- Function: borrar()
-- DROP FUNCTION borrar();
CREATE OR REPLACE FUNCTION borrar()
RETURNS trigger AS
$BODY$BEGIN
INSERT INTO a_fer2(a1, a2,id_ofi_loc,estado)
select a1::int,a2::int,id_ofi_loc,estado from a_fer;
RETURN NEW;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION borrar()
OWNER TO postgres;
-- Trigger: tr_lote on a_lote
-- DROP TRIGGER tr_lote ON a_lote;
CREATE TRIGGER tr_lote
AFTER UPDATE OF estado
ON a_lote
FOR EACH ROW
WHEN ((new.estado = 33))
EXECUTE PROCEDURE borrar();
gracias