Re: problema con trigger

From: Manuel Diego <manuel(at)radiohead(dot)cl>
To: Virginia <mavir78(at)gmail(dot)com>
Cc: Jaime Casanova <jaime(at)2ndquadrant(dot)com>, Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema con trigger
Date: 2010-10-26 13:00:25
Message-ID: 2FB5F6B5-8B07-4297-887C-58BDEF6E1DDB@radiohead.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Para hacer eso el trigger se debe ejecutar antes.(BEFORE)

CREATE TRIGGER calcular_total BEFORE INSERT OR UPDATE ON promedios
EXECUTE PROCEDURE calcular_total();

El 26-10-2010, a las 9:54, Virginia escribió:

>
>
> El 26 de octubre de 2010 08:22, Virginia <mavir78(at)gmail(dot)com> escribió:
>
>
> El 25 de octubre de 2010 23:09, Jaime Casanova
> <jaime(at)2ndquadrant(dot)com> escribió:
>
> 2010/10/25 Virginia <mavir78(at)gmail(dot)com>:
> > Buenas noches, cómo están? quisiera saber si pueden ayudarme con
> una duda.
> > Tengo una tabla con los campos id, campo1, campo2, campo3, total y
> un
> > trigger q lo que debería hacer es que cada vez q inserto un
> registro en esa
> > tabla me sume el campo1 + campo2 + campo3 y actualice ese
> resultado en el
> > campo total.
> > Ahora bien, hice el trigger q se dispara desde la misma tabla me
> crea un
> > lazo infinito, cóm puedo resolver esto? o no debo hacer un n
> trigger q se
> > dispare cuando hay un evento en la tabla X para realizar una
> acción en la
> > misma tabla X?
> >
>
> apoyo la idea de la vista (los campos calculados no deberian existir a
> menos que haya una buena razon).
>
> sobre tu problema, no ejecutes otro insert ni un update, por eso se
> dispara el trigger deberias tener un codigo algo asi:
>
> create function fn_trg_calcula() returns trigger as $$
> begin
> new.total = new.campo1+new.campo2+new.campo3;
> end;
> $$ language plpgsql;
>
> --
> Jaime Casanova www.2ndQuadrant.com
> Professional PostgreSQL: Soporte y capacitación de PostgreSQL
>
>
>
>
> Les comento, el código del trigger es el siguiente:
>
> CREATE OR REPLACE FUNCTION calcular_total() RETURNS trigger AS '
> BEGIN
> IF (tg_op = ''INSERT'') OR (tg_op = ''UPDATE'') THEN
> UPDATE promedios SET total= NEW.campo1 + NEW.campo2 +
> NEW.campo3 WHERE id = codigo;
> END IF;
> RETURN NEW;
> END
> ' LANGUAGE plpgsql;
>
>
> CREATE TRIGGER calcular_total AFTER INSERT OR UPDATE ON promedios
> EXECUTE PROCEDURE calcular_total();
>
>
>
> Con respecto a la propuesta de
> create function fn_trg_calcula() returns trigger as $$
> begin
> new.total = new.campo1+new.campo2+new.campo3;
> end;
> $$ language plpgsql;
>
> la probé y me lanza el error de que record new no está asignado aún...
>
>
>
>
>
>
> --
> ---------------------------------------------------------
> Ing. Maria Virginia Porras B.
> ---------------------------------------------------------

------------------------
Manuel Diego Paillafil Gamboa
manuel(at)radiohead(dot)cl
Móvil: 06 - 801 60 24

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Virginia 2010-10-26 13:02:56 Re: problema con trigger
Previous Message Virginia 2010-10-26 12:54:07 Re: problema con trigger