From: | Lazaro Rubén García Martinez <lgarciam(at)vnz(dot)uci(dot)cu> |
---|---|
To: | Gaston Rider <gastonrider(at)hotmail(dot)com>, Postgres Lista <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | RE: Trigger ayuda con funcion |
Date: | 2011-06-02 16:47:13 |
Message-ID: | 294D3D02D5E18D42827B2ECFEADEB6880BE1F2DC9F@mx-interno.vnz.uci.cu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
utiliza el disparador en modo for each row before update, para que te ejecute la sentencia antes que actualices el registro, entonces con OLD obtienes el atributo de la tabla antes de modificar y con NEW el nuevo valor.
Aqui te pongo un ejemplo para que puedas realizar lo que necesitas:
CREATE TABLE "public"."nuevo" (
"id" SERIAL,
"nombre" VARCHAR(20),
CONSTRAINT "nuevo_pkey" PRIMARY KEY("id")
) WITH OIDS;
CREATE TABLE "public"."historico" (
"id" SERIAL,
"nombre_viejo" VARCHAR(20),
"nombre_nuevo" VARCHAR,
CONSTRAINT "historico_pkey" PRIMARY KEY("id")
) WITH OIDS;
CREATE OR REPLACE FUNCTION "public"."funAntesUpdate" (
)
RETURNS trigger AS
$body$
DECLARE
BEGIN
INSERT INTO historico(nombre_viejo, nombre_nuevo)
VALUES(OLD.nombre, NEW.nombre);
RETURN NEW;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;
CREATE TRIGGER "trigger1" BEFORE UPDATE
ON "public"."nuevo" FOR EACH ROW
EXECUTE PROCEDURE "public"."funAntesUpdate"();
Para mas información puedes consultar la siguiente direccion:
http://www.postgresql.org.es/node/301
Saludos.
________________________________________
De: pgsql-es-ayuda-owner(at)postgresql(dot)org [pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Gaston Rider [gastonrider(at)hotmail(dot)com]
Enviado el: jueves, 02 de junio de 2011 9:12
Para: Postgres Lista
Asunto: [pgsql-es-ayuda] Trigger ayuda con funcion
Hola. Necesitarìa ayuda con una funcion... disparador en update.
necesito guardar en una tabla xxxx los campos que fueron modificados en la tabla que disaparò el trigger..
en principio necesitaria la manera de recorrer "los campos" de la tabla en cuestion, compararlos con
los valores nuevos, y en el caso de que el valor se modificó... guardar esto...
no sè si se entiende???
muchas gracias
From | Date | Subject | |
---|---|---|---|
Next Message | Alvaro Herrera | 2011-06-02 17:57:24 | Re: obetener consecutivo |
Previous Message | Miguel Angel Hernandez Moreno | 2011-06-02 16:36:20 | obetener consecutivo |