【发布时间】:2016-06-07 16:59:41
【问题描述】:
使用 PostgreSQL。 我所拥有的是: 3 个表格
1.Customer2c 与列:CustomerID,PersonID,Number_Of_Items`。
2.SalesOrderHeader2c 与列:SalesOrderID,CustomerID。
-
SalesOrderDetail2c与列:SalesOrderDetailID,SalesOrderID,OrderQty
我想创建一个触发函数,只要有人使用它就会触发
INSERT INTO 'SalesOrderDetail2c' table
这将获取插入的OrderQty 并用它更新对应的Number_Of_Items 字段。
我的触发器正在工作,但问题是每当我向 SalesOrderDetail2c 插入新值时,该函数都会获取OrderQty 值并更新Number_Of_Items 的所有行用它,而不是只更新对应的。
任何帮助表示赞赏。我目前的情况是这样的(可能完全错误,请不要判断!):
CREATE OR REPLACE FUNCTION FunctionTrigger2c() RETURNS TRIGGER AS
$BODY$
BEGIN
UPDATE Customer2c
SET Number_Of_Items =
(SELECT OrderQty
FROM SalesOrderDetail2c
INNER JOIN SalesOrderHeader2c ON (SalesOrderDetail2c.SalesOrderID = SalesOrderHeader2c.SalesOrderID)
INNER JOIN Customer2c ON (SalesOrderHeader2c.CustomerID = Customer2c.CustomerID)
ORDER BY SalesOrderDetailID DESC LIMIT 1
)
FROM SalesOrderHeader2c
WHERE SalesOrderHeader2c.CustomerID = Customer2c.CustomerID
;
RETURN NEW;
END;
$BODY$
language plpgsql;
CREATE TRIGGER Trigger2c
AFTER INSERT ON SalesOrderDetail2c
FOR EACH ROW
EXECUTE PROCEDURE FunctionTrigger2c();
【问题讨论】:
-
我承认我并不完全清楚您要做什么;但是,我想知道您是否应该引用
NEW(参见:postgresql.org/docs/current/static/plpgsql-trigger.html)来获取刚刚插入/更新的值。 -
谢谢你,伙计!有了你的提示,我才成功!
标签: sql postgresql triggers sql-update