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();