【发布时间】:2014-05-14 19:12:28
【问题描述】:
朋友们! 我有两张桌子(tb_1,tb_2)。
SQL> DESC tb_1;
Name Null? Type
----------------------------------------- -------- -----------
PK_ID NOT NULL NUMBER
SUM_QUANTITY NUMBER
SQL> DESC tb_2;
Name Null? Type
----------------------------------------- -------- -----------
FK_ID NUMBER
QUANTITY NUMBER
列 FK_ID - 列 PK_ID 上的外键。 SUM_QUANTITY 列 - QUANTITY 列中特定 pk_id 的值的总和
例如:
SQL> SELECT * FROM tb_1;
PK_ID SUM_QUANTITY
------ ------------
1 8
2 18
3 2
SQL> SELECT * FROM tb_2;
FK_ID QUANTITY
----- ----------
1 1
1 3
1 4
2 5
2 6
2 7
3 1
3 1
我想在 SUM_QUANTITY 列之后自动更新 tb_1 中的值 tb_2 中针对特定 PK_ID 的 DML(INSERT、UPDATE OF quantity、DELETE)操作!
我已经创建了触发器:
CREATE OR REPLACE TRIGGER t_aiud
AFTER INSERT OR UPDATE OF quantity OR DELETE ON tb_2
BEGIN
UPDATE tb_1 SET sum_quantity = (SELECT sum(quantity) FROM tb_2 WHERE tb_1.pk_id = tb_2.fk_id);
END;
它适用于表 tb_1 中的所有 pk_id!那么,如何在 DML 操作后自动更新特定 pk_id 列 SUM_QUANTITY 中 tb_1 中的值?
谢谢!
【问题讨论】:
-
限制 fk_id 使用 WHEN 子句。要更新特定的 pk_id,请在更新中添加 where 子句。
-
您在这里找到解决方案了吗?我面临同样的情况。