Skip site navigation (1) Skip section navigation (2)

Re: problema con trigger

From: Virginia <mavir78(at)gmail(dot)com>
To: Manuel Diego <manuel(at)radiohead(dot)cl>
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:02:56
Message-ID: AANLkTinZRz8y0_Hz0ce=r+7H7tJgFHaTRdYH5fSiAxgk@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
El 26 de octubre de 2010 08:30, Manuel Diego <manuel(at)radiohead(dot)cl> escribió:

> 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
>
>
>
>
> No, ni BEFORE ni AFTER, sigue apareciendo el mismo error

In response to

Responses

pgsql-es-ayuda by date

Next:From: Manuel DiegoDate: 2010-10-26 13:09:47
Subject: Re: problema con trigger
Previous:From: Manuel DiegoDate: 2010-10-26 13:00:25
Subject: Re: problema con trigger

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group