RE: Trigger ayuda con funcion

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

In response to

Responses

Browse pgsql-es-ayuda by date

  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