如何使用GROUPBY在sql中创建触发器?(oracle数据库)
我想做一个触发器,它根据客户ID对总成本求和,并将数据插入主订单表 表:订单详情如何使用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 | 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>
嗨,这不是一个普通的教程网站。如果你在谷歌上搜索“甲骨文触发教程”,有很多很多例子。你说“不起作用”是什么意思?你有错误吗?如果是,哪一个?还是非意外的行为?如果是这样,你期待什么?