我有两个表(在同一个postgresql数据库中),分别称为orders和products。它们或多或少是这样的:
产品:
-整数id(主)
-文本描述
-数字单价
订单:
-整数id(主)
-整数productid(product.id的外键)
-整数数量(订购金额)
-数字总价(orders.number*products.unitprice)
我需要的是一个过程,在数据库触发时将更新缺少totalprice字段的字段。
到目前为止,我的程序是这样的:
CREATE PROCEDURE update_totalprice()
BEGIN
UPDATE Orders
SET Orders.totalprice=Orders.quantity*Products.unitprice
FROM Orders, Products
WHERE Orders.productid = Products.id AND Orders.totalprice = NULL
END;
然后,我尝试创建一个数据库触发器,以便在表更改时调用该过程。
CREATE TRIGGER check_Orders
BEFORE UPDATE ON Orders
FOR EACH ROW
EXECUTE PROCEDURE update_totalprice();
这就是我被卡住的地方,我不知道我做错了什么。。。
编辑:
找到了解决办法,最后都是语法错误。
函数本身如下所示:
CREATE OR REPLACE FUNCTION orders_totalprice() RETURNS TRIGGER AS $orders_totalprice$
BEGIN
UPDATE orders SET totalprice = NEW.numberofproducts * products.unitprice FROM products
WHERE NEW.productid = products.id;
IF NOT FOUND THEN RETURN NULL; END IF;
RETURN NEW;
END;
$orders_totalprice$ LANGUAGE plpgsql;
当触发器查询如下所示时:
CREATE TRIGGER trigger_orderstotalprice
AFTER INSERT ON orders
FOR EACH ROW EXECUTE PROCEDURE orders_totalprice();
暂无答案!
目前还没有任何答案,快来回答吧!