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