0

好的,所以我现在正在尝试创建一个触发器,以帮助更新包含产品 ID、总销售额和每个产品的总数量的汇总表。本质上,我需要创建一个在更新订单后触发的触发器,当orderplaced列设置为'1'汇总表的值时,需要通过触发的触发器从其他两个表中获取数据来更新,这些表是basketbasketitem要引用的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;

我用不同的方式尝试过,这是我最后一个。我也尝试使用局部变量而不是游标,但都没有奏效,非常欢迎任何建议!

谢谢 !

4

1 回答 1

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;
于 2013-05-08T23:14:11.657 回答