El 26 de octubre de 2010 08:22, Virginia <mavi...@gmail.com> escribió:

>
>
> El 25 de octubre de 2010 23:09, Jaime Casanova 
> <ja...@2ndquadrant.com>escribió:
>
> 2010/10/25 Virginia <mavi...@gmail.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.
---------------------------------------------------------

Responder a