在postgresql查询中使用变量

时间:2015-05-20 04:22:45

标签: postgresql variables triggers

我真的需要帮助。我在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,则查询结果为空。

它杀了我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

你说:

  

它不会更新precioIVA和precioSinIVA的值   您的代码是:Customer   如果您希望此触发器触发更新,则应使用:

CREATE TRIGGER PrecioCompra After Insert ON "Compra"