Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

trigger que hace UPDATE

Estas en el tema de trigger que hace UPDATE en el foro de PostgreSQL en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 11/09/2012, 02:20
 
Fecha de Ingreso: septiembre-2012
Mensajes: 1
Antigüedad: 11 años, 7 meses
Puntos: 0
trigger que hace UPDATE

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

Etiquetas: funcion, postgre, sql, tablas, trigger, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:58.