日期:2014-05-16 浏览次数:20561 次
?
?
1.目的:
???? 网厅前台订单查询中只查到netb_order的内容,由于接到一个越级投诉,用户需要看到预受理单子
关于10000号客户人员对订单的回复,由于订单表根据订单类型的不同,关联的是不同的订单明细表,10000号
客服人员的回复存在不同的订单明细表里,于是考虑在数据库级别使用触发器。这样改动量小
2.实现:
a.首先在netb_order中加一个字段 叫 replycontent 用来存10000号客服人员对订单的回复
b.在各种订单明细表中都加上 trigger ,当有10000号客服人员添加回复的时候,trigger 会自动把明细表
回复内容同步到netb_order 中的replycontent 字段
?
?
什么是触发器?
?
触发器
是特定事件出现的时候,自动执行的代码块。类似于存储过程,但是用户不能直接调用他们。
功能:
1、 允许/限制对表的修改
2、 自动生成派生列,比如自增字段
3、 强制数据一致性
4、 提供审计和日志记录
5、 防止无效的事务处理
6、 启用复杂的业务逻辑
?
?
?
先写一个例子玩玩 ,建立两个表test1,test2,表结构一样,? 当往test1表中插入数据的时候,使用触发器,自动往test2表中也插入一条数据
?
create or replace trigger tr_insert_test1 before insert on test1 for each row begin insert into test2 values(:new.id,:new.name); end;
?
?
当使用 insert into test1(id,name) values('123','huxl');的时候 test2表中也多了一条记录
?
?
:new --为一个引用最新的列值;
:old --为一个引用以前的列值; 这两个变量只有在使用了关键字 "FOR EACH ROW"时才存在.且update语句两个都有,而insert只有:new ,delect 只有:old;
?
before表示在操作完成前触发, after表示在完成后触发
?
下面完成我们的业务
?
?
?
3.步骤: a. 见将历史数据同步到netb_order表中 update netb_order o set o.replycontent= (select up.replycontent from netb_PackagesNewSetUp up where up.id=o.businessid); update netb_order o set o.replycontent= (select ps.reply from netb_phonenewsetup ps where ps.id=o.businessid); update netb_order o set o.replycontent= (select sr.reply from netb_selfhoodreq sr where sr.selfhoodreqid=o.businessid); update netb_order o set o.replycontent= (select ci.reply from netb_cards_info ci where ci.id=o.businessid); update netb_order o set o.replycontent= (select bo.reply from netb_basicorder bo where bo.id=o.businessid); 2. 为订单从表添加触发器 drop trigger xxx 触发器需要一个一个执行 create or replace trigger tr_netb_PackagesNewSetUp after update of replycontent on netb_PackagesNewSetUp for each row begin update netb_order set replycontent=:new.replycontent where businessid=:old.id; end; create or replace trigger tr_netb_phonenewsetup after update of reply on netb_phonenewsetup for each row begin update netb_order set replycontent=:new.reply where businessid=:old.id; end; create or replace trigger tr_netb_selfhoodreq after update of reply on netb_selfhoodreq for each row begin update netb_order set replycontent=:new.reply where businessid=:old.selfhoodreqid; end; create or replace trigger tr_netb_cards_info after update of reply on netb_cards_info for each row begin update netb_order set replycontent=:new.reply where businessid=:old.id; end; create or replace trigger tr_netb_basicorder after update of reply on netb_basicorder for each row begin update netb_order set replycontent=:new.reply where businessid=:old.id; end;
?
?
?
?
?参考:
http://hi.baidu.com/zhangyadong110/blog/item/289220233f983baf4723e807.html
?
http://space.itpub.net/12045182/viewspace-613908
?
?
?