Hola,
Haber te echo la mano dejándote la función y trigger que la ejecuta y que están funcionando a la perfección, espero que te puedas guiar:
Función:
Código SQL:
Ver originalCREATE OR REPLACE FUNCTION proy.sptractualizafactura() RETURNS TRIGGER
AS $proc$
DECLARE
vsubtotal NUMERIC;
vporiva NUMERIC;
vcantiva NUMERIC;
vtotal NUMERIC;
BEGIN
SELECT INTO vsubtotal SUM(total)
FROM proy.tregistra
WHERE idfactura=NEW.idfactura;
IF (FOUND) THEN
SELECT INTO vporiva, vcantiva poriva, cantiva
FROM proy.tfactura
WHERE idfactura=NEW.idfactura;
IF (FOUND) THEN
vcantiva:= (vsubtotal*vporiva)/100;
vtotal:= vsubtotal+vcantiva;
UPDATE proy.tfactura
SET subtotal=vsubtotal, cantiva=vcantiva, total=vtotal
WHERE idfactura=NEW.idfactura;
END IF;
END IF;
RETURN NEW;
END; $proc$
LANGUAGE 'plpgsql';
Trigger:
Código SQL:
Ver originalCREATE TRIGGER tractualizafactura
AFTER INSERT OR UPDATE
ON proy.tregistra
FOR EACH ROW
EXECUTE PROCEDURE proy.sptractualizafactura();
Saludos.