- 论坛徽章:
- 0
|
trigger问题求助
经过一番折腾后我想了一个简单而又有效的办法,只用一个语句级触发器就可搞定
CREATE OR REPLACE TRIGGER TRIGGER_PING_MONITOR
AFTER DELETE OR INSERT OR UPDATE OF RecordStatus ON PINGMONITOR_ADMIN
BEGIN
INSERT INTO NODE_ADMIN SELECT B.PingMonitorID,1 FROM NODE_ADMIN A,PINGMONITOR_ADMIN B WHERE A.NODEID(+)=B.PingMonitorID AND B.RecordStatus=0 AND A.NODEID IS NULL;
--当插入一个在NODE_ADMIN里没有的行时的处理,如果有相应的行在NODE_ADMIN就无行被插入
UPDATE NODE_ADMIN A SET PINGMONITOR=(SELECT DECODE(COUNT(*),0,0,1) FROM PINGMONITOR_ADMIN B WHERE A.NODEID=B.PingMonitorID AND B.RecordStatus=0);
END TRIGGER_PING_MONITOR;
--每次事务都对NODE_ADMIN进行一次刷新,这样就不存在一致性问题了,前面我的答复虽然也可完成相应的功能,但还要有很多加工,这个就不必改太多了
多谢nyfor的指点
/ |
|