El 26 de octubre de 2010 08:30, Manuel Diego <man...@radiohead.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 <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. > --------------------------------------------------------- > > > > ------------------------ > *Manuel Diego Paillafil Gamboa* > man...@radiohead.cl > Móvil: 06 - 801 60 24 > > > > > No, ni BEFORE ni AFTER, sigue apareciendo el mismo error