From: | "Marcelo Retamal" <mretamal(at)cmet(dot)net> |
---|---|
To: | Leonardo Porras Sànchez <lporras(at)siid-ltda(dot)com> |
Cc: | "Lista Postgres" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Trigger |
Date: | 2006-03-14 19:39:33 |
Message-ID: | 001901c6479f$054fdd10$da018282@mretamalxp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola, lo que pasa (a mi tb me ha pasado) es que hace un ciclo infinito de
actualizaciones, al actualizar el registro por primera vez, esa
actualización llama a otra y otra...
Debes pensarlo más profundamente y ver que hacer, analiza en los casos
cuando en disparador se ejecuta en AFTER (además la variable OLD se ocupa en
los casos de ejecución con AFTER), por eso te recomiendo que pienses bien y
antes que nada rutealo paso a paso en el papel, antes de.
Chao.
Atte., Marcelo Retamal Vallejos.
Ingeniería de Sistemas
CMET
----- Original Message -----
From: "Leonardo Porras Sànchez" <lporras(at)siid-ltda(dot)com>
To: "postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Sent: Tuesday, March 14, 2006 2:58 PM
Subject: [pgsql-es-ayuda] Trigger
> Tengo el siguiente trigger para actualizar la informacion de un campo de
> la tabla al cual quiero insertar o modificar registros; cuando hago la
> modificacion de un registro la funcion se como el servidor y no me
> actualiza el campo... ¿Ques estare asiendo mal..?
>
> Agradesco la atención prestada.
>
>
> DROP TRIGGER tgr_ssp_assidate ON surface_locsamples;
> DROP FUNCTION ssp_assidate();
>
> CREATE OR REPLACE FUNCTION ssp_assidate()
> RETURNS "trigger" AS
> $BODY$
> DECLARE
> gpt surface_gps_point%ROWTYPE;
> psr surface_polygonal%ROWTYPE;
> sample varchar(8);
> sdate date;
> polygonal varchar(15);
> ssource varchar(16);
> BEGIN
> sample = OLD.ssp_id_sample;
> ssource = OLD.ssp_source;
> IF ssource='GPS' THEN
> SELECT * INTO gpt FROM surface_gps_point WHERE
> gpt_id_sample=sample;
> IF FOUND THEN
> sdate = gpt.gpt_date_hour;
> UPDATE surface_locsamples SET ssp_date=sdate WHERE
> ssp_id_sample=sample;
> END IF;
> ELSEIF (ssource='TAPE AND COMPASS') THEN
> polygonal = OLD.ssp_psr_id
> SELECT * INTO psr FROM surface_polygonal WHERE psr_id=polygonal;
> IF FOUND THEN
> sdate = psr.psr_date_begun;
> UPDATE surface_locsamples SET ssp_date=sdate WHERE
> ssp_id_sample=sample;
> END IF;
> END IF;
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
> ALTER FUNCTION ssp_assidate() OWNER TO greystar;
>
> CREATE TRIGGER tgr_ssp_assidate
> BEFORE UPDATE
> ON surface_locsamples
> FOR EACH ROW
> EXECUTE PROCEDURE ssp_assidate();
>
--------------------------------------------------------------------------------
>
> ---------------------------(fin del mensaje)---------------------------
> TIP 4: No hagas 'kill -9' a postmaster
>
From | Date | Subject | |
---|---|---|---|
Next Message | Martin Marques | 2006-03-14 20:23:03 | Re: Error UTF8 |
Previous Message | Adeli Rodriguez | 2006-03-14 19:36:45 | Error UTF8 |