我有两个表(库存和产品批次(,我需要一个触发器,通过对批次数量(来自产品批次(求和来计算产品(在库存表中(的总数量。
我对触发器了解不多,但我的问题与此类似 从另一个表中的另一列计算列值。这是我的情况。
CREATE TABLE Stock (productId INTEGER,totalQuantity INTEGER, price NUMERIC(30,2))
PRIMARY KEY (productId);
CREATE TABLE productsLot (productId INTEGER CONSTRAINT fk_stock_productsLot REFERENCES ON Stock(productId) , lotNumber VARCHAR, lotQuantity INTEGER, expirationDate DATE, PRIMARY KEY (productId, lotNumber));
CREATE TRIGGER update_quantity_stock
BEFORE INSERT ON stock SET NEW.totalQuantity =
(
SELECT sum(lotQuantity)
FROM productsLot
WHERE productId = NEW.productId
LIMIT 1
);
我收到此错误:
"SET"处或附近出现语法错误
显然这是一个相当愚蠢的问题,但我得到了它,多亏了尼克。这是解决方案
CREATE OR REPLACE FUNCTION update_quantity_stock()
RETURNS trigger AS
$$
BEGIN
UPDATE stock SET totalQuantity = (select sum(lotQuantity)
FROM productsLot
WHERE productsLot.productId=stock.productId);
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';
--触发
CREATE TRIGGER update_quantity_stock_trigger
AFTER INSERT
ON productsLot
FOR EACH ROW
EXECUTE PROCEDURE update_quantity_stock();