Por qué razón no se deben utilizar los campos calculados? 
Es que en alguna de mis tablas existen varios :) que me recalculan gastos, base 
imponible, iva, etc de un registro factura cada vez que introduzco un apunte 
contable que hace referencia a esa factura. 
¿Es un mal diseño?

Gracias

Carlos Joaniquet Tamburini

El 26/10/2010, a las 14:52, 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();
> 

Responder a