我真的需要帮助。我在postgreSQL中做了一个触发器,我有这个代码:
CREATE OR REPLACE FUNCTION precioCompra() RETURNS TRIGGER AS $PrecioCompra$
DECLARE
valorProducto numeric;
valorOferta numeric;
valorPack numeric;
valorServicio numeric;
precioIVA numeric;
precioSinIVA numeric;
fila integer;
BEGIN
fila := new."numeroCompra";
SELECT SUM("precioIVA"*"cantidad") as valor
FROM "Producto", (select "codigoProducto", "cantidad"
FROM "IncluyeProducto" WHERE "IncluyeProducto"."numeroCompra" = fila) as producto
where producto."codigoProducto" = "Producto"."codigoProducto" into valorProducto;
IF valorProducto IS NULL then
valorProducto := 0;
END IF;
select SUM("precioIVA"*"cantidad") as valor
FROM "Oferta", (select "codigoProducto", "cantidad"
FROM "IncluyeOferta" WHERE "IncluyeOferta"."numeroCompra" = fila) as oferta
where oferta."codigoProducto" = "Oferta"."codigoProducto" into valorOferta;
IF valorOferta IS NULL then
valorOferta := 0;
END IF;
select SUM("precioIVA"*"cantidad") as valor
FROM "Servicio", (select "codigoServicio", "cantidad"
FROM "IncluyeServicio" WHERE "IncluyeServicio"."numeroCompra" = fila) as servicio
where servicio."codigoServicio" = "Servicio"."codigoServicio" into valorServicio;
IF valorServicio IS NULL then
valorServicio := 0;
END IF;
select SUM("precioIVA"*"cantidad") as valor
FROM "Pack", (select "codigoPack", "cantidad"
FROM "IncluyePack" WHERE "IncluyePack"."numeroCompra" = fila) as pack
where pack."codigoPack" = "Pack"."codigoPack" into valorPack;
IF valorPack IS NULL then
valorPack := 0;
END IF;
RAISE NOTICE 'El valor de Pack es % ',valorPack;
precioIVA := valorProducto + valorPack + valorServicio + valorOferta;
precioSinIVA := precioIVA / 1.21;
new."importeIVA" := precioIVA;
new."importeSinIVA" := precioSinIVA;
RETURN NEW;
END;
$PrecioCompra$ LANGUAGE plpgsql;
CREATE TRIGGER PrecioCompra After Insert ON "Compra"
FOR EACH ROW EXECUTE PROCEDURE precioCompra();
如果我使用数字代替变量fila(在查询中),它会打印出所有内容的正确值,但随后我会查看" Compra"表,它不起作用。它没有更新precioIVA和precioSinIVA的价值。 (程序中的最后一行)
如果我在代码中使用变量fila,则查询结果为空。
它杀了我。提前谢谢。
答案 0 :(得分:0)
你说:
它不会更新precioIVA和precioSinIVA的值 您的代码是:
Customer
如果您希望此触发器触发更新,则应使用:
CREATE TRIGGER PrecioCompra After Insert ON "Compra"