SQL触发器技术在MAS平台中的运用

2013-04-29 05:30殷铭
关键词:工号触发器时效性

摘要:运用SQL触发器技术,对华为MAS短信平台进行二次开发,完成接受指令后实时查询相关数据并返回到的短信。

关键词:短信查询 短信平台 SQL触发器 EIE-2000

1 短信平台系统结构

学院通过移动公司引进华为infoX-EIE 2000信息机作为数字化校园网络信息系统的补充。为教职工和学生提供了基于移动终端(包括短信、彩信、WAP、手机客户端等)的信息化应用服务。为学校各类应用与移动终端业务的应用结合提供了统一接入平台,实现SMS、USSD、MMS、WAP等方面的移动数据应用,支持SMPP、CMPP等多种开放协议。

infoX-EIE 2000是华为和中国移动联合开发的为集团客户提供的基于移动终端的信息化应用服务平台。该设备采用的是制定版的Microsoft Windows XP 5.1,其软件平台为MAS2000(Mobile Agent Server),管理界面采用B/S结构,JSP开发,数据库为MS SQL2000。

但在长期的运用中仍然处于大量信息单向传输的状态。即运用基于下行方向。对于上行方向存在处理数据信息处理不够即时,处理不够方便的问题。

2 SQL触发器介绍

SQL Server提供了两种触发器:INSTEAD OF和AFTER触发器,他们的区别在于被激活的时机不同,AFTER触发器又称为后触发器,该类触发器是在引起触发器执行的修改语句成功完成之后执行,如果修改语句因错误(如违反约束或语法错误)而失败,触发器将不会执行。此类触发器只能定义在表上,不能创建在视图上。可以为每个触发操作(INSERT、UPDATE或DELETE)创建多个AFTER触发器。

SQL SERVER为每个触发器都创建两个特殊的临时表:

deleted表和inserted表。这是两个逻辑表,它们存放于内存中,不存放在数据库中,由系统来维护,不允许用户直接对这两个表进行修改。这两个表的结构总是与被触发器作用的表的结构相同。触发器工作完成,与触发器相关的这两个表也被删除。Deleted表用于存放在执行DELETE或UPDATE语句时从被该触发器作用的表中删除的所有行,inserted表用于存放在执行INSERT或UPDATE语句时要加到该触发器作用的表中的任何新行。需要特别注意的是,当用户要执行更新(UPDATE)操作时,系统首先将要进行修改的记录复制到Deleted表格中,然后再将修改后的数据复制到Inserted表内,而不是直接对原有的数据进行修改。一个UPDATE操作可以看作先执行一个DELETE操作,再执行一个INSERT操作,旧的行首先被移到Deleted表,然后新的行插入到激活触发器的表和Inserted表中。

3 短信平台相关数据库

通过向移动服务商咨询和相关技术资料查询,得知在做功能开发可以直接通过数据库操作进行短信的收发工作,其中主要涉及到两张表:tbl_SMSendTask和tbl_SMReceived。对应发送短信和接受短信。具体表结构可以查看数据库。

Tbl_SMSendTask表:这是短信发出任务表,添加到这个表里面的内容,如果条件符合,或者说对应的插入信息是真实的话,那么mas机就会立即发出该条信息,发出成功后这条记录就会自动删除。如下SQL语句即可发送一条短消息。

insert into tbl_SMSendTask (CreatorID,ServiceID,OperationType,sm_Content,OrgAddr,DestAddr,

SendType,TaskStatus,FeeType,FeeCode,MsgID) values('0000','MJS3919901','WAS', '测试',' 1065735122550308','13606212***','4','0','01','0','0')

4 程序编写

对于查询和投票等时效性比较强的任务,利用短信平台自身数据库的触发器来处理,能替代很多程序中不能或很难完成的弱点。程序要做到很强的时效性需要将程序时刻运行,时刻刷新进行查询回复,反复访问数据库,这样实施比较困难,且会耗费大量的系统资源,相关服务器负载也会很大。

而通过在相关数据表格上使用SQL语言,按照查询程序流程,建立触发器,可以部分的解决上述问题。

CREATE trigger send_ok on dbo.tbl_SMReceived

for insert

as

begin

declare @fashouji varchar(36),@shoushouji varchar(24),@xingming varchar(6),@gonghao varchar(6),@shouneirong varchar(150),@faneirong varchar(150),@zhiling varchar(20)

declare @sm_id int

declare @shifagongzi float

select @sm_id=SM_ID,@fashouji=OrgAddr,@shoushouji=DestAddr,@shouneirong=SM_Content from INSERTED

set @zhiling=substring(@shouneirong,1,4)

if @zhiling='gzcx'

begin

select @xingming=姓名,@gonghao=工号 from dbo.gh where 手机=@fashouji

select @shifagongzi=实发工资 from dbo.o_gz where 工号=@gonghao

set @faneirong=@xingming+'_实发工资:'+cast(@shifagongzi as varchar)

INSERT into dbo.tbl_SMSendTask (CreatorID,SmSendedNum,OperationType,SuboperationType,SendType,OrgAddr,DestAddr,SM_Content,SendTime,NeedStateReport,ServiceID,FeeType,FeeCode,SMType,MessageID,DestAddrType,SubTime,TaskStatus,SendLevel,SendState,TryTimes,Count)values('0308',0,'WAS',66,1,1065735122550308,@fashouji,@faneirong,GetDate(),0,'MJS3919901',02,10,0,0,0,GetDate(),0,0,0,3,1)

end

end

测试结果

发送gzcx到1065XXX122550308后返回 张三_工资:834.28

5 总结

本文提供了一种解决了实时下行短信的思路。在开发移动MAS服务时,可以通过数据库本身作很多处理,而不是相关程序。触发器,作业等数据库功能的使用,可以在程序处理之前对用户短信指令和内容进行相关处理,分析,使系统具有更强的时效性,可用性。

参考文献:

[1]微软公司.Microsoft SQL Server 2000标准教程[M].中国劳动社会保障出版社,2003.3.

[2]黄维通.SQL Server 2000简明教程[M].清华大学出版社,2002.3.

[3]华为公司.infoX-企业信息机用户手册.华为技术有限公司,2007.3.

[4]王鹏宇.SQLServer2000触发器技术的应用[M].内江科技,2008,9:125.

[5]季磊等.针对预约挂号系统的短信平台开发与应用[J].医疗卫生装备,2009,12:49-50.

作者简介:殷铭(1979-),男,江苏江阴人,教师,讲师,研究方向:制造业信息化。

猜你喜欢
工号触发器时效性
利用Access和VBA编程实现医保变更业务中Word表格模板的批量打印
试析如何确保新闻采访的真实性和时效性
主从JK触发器逻辑功能分析
基于J2EE公司员工信息管理系统设计
使用触发器,强化安全性
荷载预压加固吹填土时效性研究
浅谈如何提高兽医防控的时效性
当下新闻编辑时效性分析
图说
对触发器逻辑功能转换的分析