如何使用GROUPBY在sql中创建触发器?(oracle数据库)

如何使用GROUPBY在sql中创建触发器?(oracle数据库),sql,oracle,Sql,Oracle,我想做一个触发器,它根据客户ID对总成本求和,并将数据插入主订单表 表:订单详情 ID | CUSTOMER_ID | TOTALCOST ------------------------ 1 | 1000 | 50 2 | 1000 | 50 3 | 2000 | 200 4 | 2000 | 200 表:主要订单

我想做一个触发器,它根据客户ID对总成本求和,并将数据插入主订单表

表:订单详情

        ID |  CUSTOMER_ID | TOTALCOST 
          ------------------------  
          1 |    1000   | 50
          2 |    1000   | 50
          3 |    2000   | 200
          4 |    2000   | 200
表:主要订单

         CUSTOMER_ID | ORDER_PRICE 
          ------------------------  
           1000   | 100
           2000   | 400
我试过这个,但不起作用

CREATE OR REPLACE TRIGGER MOVEDETAIL
BEFORE INSERT ON MAIN_ORDER FOR EACH ROW
BEGIN
SELECT ORDER_DETAIL.CUSTOMER_ID,ORDER_DETAIL.SUM(TOTALCOST)
INTO :NEW.CUSTOMER_ID,:NEW.ORDER_PRICE
FROM ORDER_DETAIL
GROUP BY CUSTOMER_ID;
END;

将触发器放在一边,如果我很清楚您有一个表
ORDER\u DETAIL
,并且您希望第二个表(
MAIN\u ORDER
)的数据与
ORDER\u DETAIL
数据的每次修改保持一致,因此,
MAIN\u ORDER
始终包含
ORDER\u DETAIL
中每个
CUSTOMER\u ID
TOTALCOST
之和

如果要使用触发器执行此操作,则必须处理对
订单详细信息
的每次修改,也就是说,您需要
插入
更新
删除
上的
订单详细信息
(而不是
主订单

考虑到您只需要保持信息的一致性,我建议创建一个视图,而不是使用触发器处理表

例如:

CREATE OR REPLACE VIEW V_MAIN_ORDER
AS SELECT CUSTOMER_ID,
          SUM(TOTALCOST) AS ORDER_PRICE
   FROM ORDER_DETAIL
   GROUP BY CUSTOMER_ID
视图始终显示正确的信息,不需要触发器

SQL> INSERT INTO ORDER_DETAIL( ID, CUSTOMER_ID, TOTALCOST) VALUES (1, 1000, 50);

1 row created.

SQL> INSERT INTO ORDER_DETAIL( ID, CUSTOMER_ID, TOTALCOST) VALUES (2, 1000, 50);

1 row created.

SQL> INSERT INTO ORDER_DETAIL( ID, CUSTOMER_ID, TOTALCOST) VALUES (3, 2000, 200);

1 row created.

SQL> INSERT INTO ORDER_DETAIL( ID, CUSTOMER_ID, TOTALCOST) VALUES (4, 2000, 200);

1 row created.

SQL> SELECT * FROM V_MAIN_ORDER;

CUSTOMER_ID ORDER_PRICE
----------- -----------
       1000         100
       2000         400
不管你在桌子上做什么

SQL> DELETE ORDER_DETAIL WHERE CUSTOMER_ID = 1000;

2 rows deleted.

SQL> SELECT * FROM V_MAIN_ORDER;

CUSTOMER_ID ORDER_PRICE
----------- -----------
       2000         400

SQL>

嗨,这不是一个普通的教程网站。如果你在谷歌上搜索“甲骨文触发教程”,有很多很多例子。你说“不起作用”是什么意思?你有错误吗?如果是,哪一个?还是非意外的行为?如果是这样,你期待什么?