2015-05-20 43 views
0

我真的需要帮助。我做PostgreSQL中触发和我有这样的代码:如果我使用的是数字,而不是变量FILA(查询内)在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(); 

它打印一切正确的价值,但后来我看在“ Compra“表,它不起作用。它不会更新precioIVA和precioSinIVA的值。 (过程中的最后一行)

如果我在代码中使用变量fila,则查询的结果为空。

这是在杀我。提前致谢。

回答

0

你说:

它不更新precioIVA和precioSinIVA 的价值和你的代码是:CREATE TRIGGER PrecioCompra After Insert ON "Compra" 如果你想这个触发器触发的更新,你应该使用:

CREATE TRIGGER PrecioCompra After Insert or Update ON "Compra"