创建使用来自两个不同表的数据更新表的触发器

时间:2013-05-08 18:22:46

标签: sql oracle plsql triggers

好的,所以我现在正在尝试创建一个触发器,帮助更新包含产品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;

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

谢谢!

1 个答案:

答案 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;