大家好,我第一次在Stack Overflow中问。
所以我的问题如下:当在表A中插入一行时,需要计算奖励积分,并且必须将其添加到表B的“赚取积分”列中。我们还需要根据以下等级计算额外积分:表B中的“客户”。表B的FK引用了表C,该表包含了“我需要”属性,因此我的积分计算正确。
我已经设法编译了以下代码,这些代码基本上将表A和B链接在一起,但是我不知道如何从表C中获取所需的值,以使其正确。
CREATE OR REPLACE TRIGGER JavierRewards
AFTER INSERT ON Purchases
FOR EACH ROW
BEGIN
UPDATE customers
SET customers.earned_points = customers.earned_points + Round(:New.purchase_amount * 1.5)
WHERE customers.cust_id = :new.cust_id;
END;
有什么想法吗?第一次学习触发,因此有点令人沮丧。
答案 0 :(得分:2)
您可以将以下内容与额外的select语句一起使用:
CREATE OR REPLACE TRIGGER JavierRewards
AFTER INSERT ON Purchases
FOR EACH ROW
v_Extra_Amount TableC.Extra_Amount%type;
BEGIN
BEGIN
SELECT c.Extra_Amount
INTO v_Extra_Amount
FROM TableC c
JOIN customers s on s.c_ID = c.ID
WHERE s.cust_id = :new.cust_id;
EXCEPTION WHEN no_data_found THEN v_Extra_Amount := 0;
END;
UPDATE customers s
SET s.earned_points = s.earned_points + Round(:New.purchase_amount * 1.5)
+ (:New.Purchase_amount * v_Extra_Amount)
WHERE s.cust_id = :new.cust_id;
END;
答案 1 :(得分:0)
您应该考虑将插入和更新操作都放在某个函数中,因为只有在最后一个选项imho时,才应使用触发器