表结构:表一(从表):车牌号 业务ID 应交金额 实交金额 交款日期 修改日期
表二(主表):车牌号 车主 车辆型号ID 应收合计 实收合计要求:
在插入或修该表一时触发,动作:
1。如果是插入操作,把表 一交款日期置为当前日期
2。如果是修改操作,把表一修改日期置为当前日期
3。插入或修改表一时,计算改车牌号的应收合计和实收合计,并修改表二相应
字段值。另外,为了正确计算应收合计和实收合计,该触发器是不是应该在插入或修改后触发而不是之前?
表二(主表):车牌号 车主 车辆型号ID 应收合计 实收合计要求:
在插入或修该表一时触发,动作:
1。如果是插入操作,把表 一交款日期置为当前日期
2。如果是修改操作,把表一修改日期置为当前日期
3。插入或修改表一时,计算改车牌号的应收合计和实收合计,并修改表二相应
字段值。另外,为了正确计算应收合计和实收合计,该触发器是不是应该在插入或修改后触发而不是之前?
AFTER INSERT OR DELETE OR UPDATE ON 表一
FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.交款日期 :=SYSDATE;
--增加数值: 原值 + 新增部分
UPDATE 表二 SET 应收合计=应收合计+:NEW.应交金额,实收合计=实收合计+:NEW.实交金额 WHERE 车牌号=:OLD.车牌号;
END IF; IF UPDATING THEN
:NEW.修改日期 :=SYSDATE;
--更新数值:原值 + 变动部分
UPDATE 表二 SET 应收合计=应收合计+(:OLD.应交金额-:NEW.应交金额),
实收合计=实收合计+(:OLD.实交金额-:NEW.实交金额)
WHERE 车牌号=:OLD.车牌号;
END IF;
IF DELETING THEN
--减少数值: 原值 - 减少部分
UPDATE 表二 SET 应收合计=应收合计-:OLD.应交金额,实收合计=实收合计-:OLD.实交金额 WHERE 车牌号=:OLD.车牌号;
END IF;
END;
/
表二(主表):车牌号 车主 车辆型号IDCREATE OR REPLACE VIEW V_表二 AS
SELECT A.车牌号,A.车主,A.车辆型号ID,
SUM(B.应交金额) AS 应收合计,
SUM(B.实交金额) AS 实收合计
FROM 表二 A,表一 B
WHERE A.车牌号=B.车牌号
GROUP BY A.车牌号,A.车主,A.车辆型号ID
/这样就只需要一个很简单的触发器来维护修改日期字段:CREATE OR REPLACE TRIGGER TRG_TT
BEFORE UPDATE ON 表一
FOR EACH ROW
BEGIN
:NEW.修改日期 :=SYSDATE;
END;
/甚至可以考虑在应用中直接写入修改日期,这样连触发器都不需要了