Re: problema con trigger

From: Manuel Diego <manuel(at)radiohead(dot)cl>
To: Virginia <mavir78(at)gmail(dot)com>
Cc: Ayuda Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: problema con trigger
Date: 2010-10-26 13:09:47
Message-ID: DA1B4489-068C-4D6A-8A85-715678FA57F1@radiohead.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Lo que debes hacer es eliminar el lanzamiento del trigger AFTER, eso
es lo primero, ya que "DESPUES" no existe el NEW.

Después que hayas hecho lo anterior, crea la instrucción:

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

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

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

------------------------
Manuel Diego Paillafil Gamboa
manuel(at)radiohead(dot)cl

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo Villanueva 2010-10-26 13:11:06 Re: problema con trigger
Previous Message Virginia 2010-10-26 13:02:56 Re: problema con trigger