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

Re: problema con trigger

From: Guillermo Villanueva <guillermovil(at)gmail(dot)com>
To: Virginia <mavir78(at)gmail(dot)com>
Cc: Manuel Diego <manuel(at)radiohead(dot)cl>, 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:11:06
Message-ID: AANLkTikCHmt_8oY23jOTWyYXR2AYeWd0zhjRFYZ9bZLF@mail.gmail.com (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Virginia, insisto en que no deberías tener ese campo en la tabla.
Hacé una función o una vista

Saludos

~~~~~~~~~~~~~~~~
Guillermo Villanueva


El 26 de octubre de 2010 10:02, Virginia <mavir78(at)gmail(dot)com> 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
>> Móvil: 06 - 801 60 24
>>
>>
>>
>>
>> No, ni BEFORE ni AFTER, sigue apareciendo el mismo error
>

In response to

pgsql-es-ayuda by date

Next:From: Juan Pablo Sandoval RiveraDate: 2010-10-26 14:13:23
Subject: Consulta relacionada con las referencias y su integridad
Previous:From: Manuel DiegoDate: 2010-10-26 13:09:47
Subject: Re: problema con trigger

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