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 <mavi...@gmail.com> escribió: > > > 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 >