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

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Guillermo VillanuevaDate: 2010-10-26 13:11:06
Subject: Re: problema con trigger
Previous:From: VirginiaDate: 2010-10-26 13:02:56
Subject: Re: problema con trigger

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