创建Oracle更新触发器

时间:2018-12-01 22:42:06

标签: sql oracle plsql insert-update database-trigger

大家好,我第一次在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;

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

2 个答案:

答案 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时,才应使用触发器