日期:2014-05-16  浏览次数:20584 次

trigger 触发器的使用
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表中也插入一条数据



Sql代码
1.create or replace trigger tr_insert_test1
2. before insert on test1
3. for each row
4.begin
5.
6.insert into test2 values(:new.id,:new.name);
7.
8.end;
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表示在完成后触发



下面完成我们的业务







Sql代码
1.3.步骤:
2.a. 见将历史数据同步到netb_order表中
3.
4.update netb_order o set o.replycontent= (select up.replycontent
5.from
6.netb_PackagesNewSetUp up where up.id=o.businessid);
7.
8.
9.
10.update netb_order o set o.replycontent= (select ps.reply
11.from
12.netb_phonenewsetup ps where ps.id=o.businessid);
13.
14.
15.
16.update netb_order o set o.replycontent= (select sr.reply
17.from
18.netb_selfhoodreq sr where sr.selfhoodreqid=o.businessid);
19.
20.
21.update netb_order o set o.replycontent= (select ci.reply
22.from
23.netb_cards_info ci where ci.id=o.businessid);
24.
25.
26.update netb_order o set o.replycontent= (select bo.reply
27.from
28.netb_basicorder bo where bo.id=o.businessid);
29.
30.
31.2. 为订单从表添加触发器
32.
33.
34.drop trigger xxx
35.
36.触发器需要一个一个执行
37.
38.create or replace trigger tr_netb_PackagesNewSetUp
39. after update of replycontent on netb_PackagesNewSetUp
40. for each row
41.begin
42.update netb_order set replycontent=:new.replycontent where businessid=:old.id;
43.
44.end;
45.
46.
47.create or replace trigger tr_netb_phonenewsetup
48. after update of reply on netb_phonenewsetup
49. for each row
50.begin
51.update netb_order set replycontent=:new.reply where businessid=:old.id;
52.
53.end;
54.
55.create or replace trigger tr_netb_selfhoodreq
56. after update of reply on netb_selfhoodreq
57. for each row
58.begin
59.update netb_order set replycontent=:new.reply where businessid=:old.selfhoodreqid;
60.
61.end;
62.
63.
64.create or replace trigger tr_netb_cards_info
65. after update of reply on netb_cards_info
66. for each row
67.begin
68.update netb_order set replycontent=:new.reply where businessid=:old.id;
69.
70.end;
71.
72.
73.
74.create or replace trigger tr_netb_basicorder
75. after update of reply on netb_basicorder
76. for each row
77.begin
78.update netb_order set replycontent=:new.reply where businessid=:old.id;
79.
80.end;

?