创建Oracle更新触发器



大家好,第一次在Stack Overflow这里提问。

因此,我的问题如下:当一行插入表a时,需要计算奖励积分,并且必须将其添加到表B中的赢取积分列中。我们还需要根据表B中客户的级别计算额外积分。表B有一个引用表C的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;

有什么想法吗?第一次学习会触发,所以有点令人沮丧。

您可以将以下语句与额外的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;

您应该考虑将插入和更新操作放在某个函数中,因为只有在最后一个选项imho 时才应该使用触发器

最新更新