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