好的,所以我现在正在尝试创建一个触发器,帮助更新包含产品ID,总销售额和每件产品总数量的汇总表。基本上,我需要创建一个在更新订单后触发的触发器,当orderplaced
列设置为值'1'
时,摘要表将需要通过触发的触发器来更新来自basket
和basketitem
的其他两个表的数据,以引用idproduct
。我已经创建了代码但是为了更多我想到并分析它,我无法获得有效的编译触发器。我将添加我的代码,以便您可以了解我在这里要做的事情。谢谢!
create or replace
TRIGGER BB_SALESUM_TRG
AFTER UPDATE OF orderplaced ON BB_BASKET
DECLARE
CURSOR salesum_cur IS
SELECT bi.idproduct as idp, sum(b.total) as tot, sum(b.quantity) as qua,
bi.orderplaced as orpl
FROM bb_basket b, bb_basketitem bi
WHERE b.idbasket = bi.idbasket;
BEGIN
FOR rec_cur IN salesum_cur LOOP
IF rec_cur.orpl = 1 THEN
INSERT INTO bb_sales_sum (idproduct, tot_sales, tot_qty)
VALUES (rec_cur.idp, rec_cur.tot, rec_cur.qua));
END IF;
END LOOP;
END;
我以不同的方式尝试过,这是我拥有的最后一个。我也尝试使用局部变量而不是光标,但两种方式都没有用,任何建议都非常受欢迎!
谢谢!
答案 0 :(得分:0)
如果我正确理解您的要求,以下PL / SQL应指向正确的方向。我无法测试这个:
CREATE OR REPLACE TRIGGER BB_SALESUM_TRG
AFTER UPDATE OF orderplaced ON BB_BASKET
FOR EACH ROW
WHEN (new.orderplaced = 1)
BEGIN
INSERT INTO bb_sales_sum(idproduct, tot_sales, tot_qty number)
SELECT idproduct, sum(b.total), sum(b.quantity)
FROM bb_basket b INNER JOIN bb_basketitem bi
ON b.idbasket = bi.idbasket
WHERE b.idbasket = :new.idbasket
GROUP BY idproduct
END;