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
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 |