存储过程在人事管理子系统中的应用
发布时间:2019-08-14 来源: 人生感悟 点击:
[摘 要]分析了存储过程的特性和优势,总结出存储过程将提高数据库管理系统的效率和性能,在人事管理子系统中利用存储过程实现复杂报表中的数据统计功能,并给出存储过程的具体实现。
[关键词]人事管理子系统 存储过程 VB
作者简介:葛明明(1977-),女,汉族,吉林长岭人,助教,工学硕士,主要研究方向:软件工程与软件自动化;龚自霞(1978-),女(汉族),安徽巢湖人,助教,工学硕士,主要研究方向:计算机网络技术及其应用。
为了加快校园信息电子化的进程,我院立项开发OA校园办公自动化系统。项目主要涉及教学运行、科研管理、人事管理、教材管理、财务管理等几个子系统。系统采用客户/服务器(C/S)的工作模式,服务器端主要用于存放数据,客户端的应用程序负责数据处理。如何提高应用程序的执行效率、提高整个管理系统的性能是个重要问题。
通过实践验证,在开发中适当的使用存储过程将减少网络数据传输的耗时,有利于提高整个系统的性能,并对于系统和功能的修改和维护也有很大帮助。本文将对存储过程及其在人事管理子系统中的应用进行分析,并提供人事管理模块中利用存储过程制作复杂报表的应用实例。
一、存储过程
所谓存储过程(Stored Procedure),就是存储在数据库服务器上的一组预先编译好的SQL语句,就好像一个已经定义好的函数。它具有以下几个特性:
执行速度快,存储过程在创建的时候就经过了语法检查和性能优化,它在第一次调用后就驻留内存中,不必再经过编译和优化,而一般SQL语句每执行一次就编译一次;
当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处结合一起使用;
存储过程可以重复使用;
安全性高,可设定只有某此用户才具有对指定存储过程的使用权。
二、使用存储过程的优势
存储过程在创建的时候就被数据库引擎编译,编译后生成的结果已经存放在服务器端。在存储过程中可以包含大量的SQL语句,但存储过程是作为一个独立的单位来使用的。在调用的时候只用一个语句就可以实现,所以大大减少了网络上数据的传输。
利用存储过程,应用程序只需传送存储过程名和相应的参数,服务器端执行完存储过程只发送给客户端执行的结果,避免客户端和服务器端之间频繁交换数据造成的网络延时甚至网络堵塞。
存储过程是存储在数据库服务器上的一组预编译SQL语句,将SQL语句和源代码分离,使得SQL语句和源代码分开维护成为可能。可以按照不同的功能模块,设计不同的存储过程以供使用。
尽管调试存储过程比较困难,但对于使用频率高或者结构复杂的SQL语句适合采用存储过程来编写。
人事管理子系统中需要生成比较复杂的统计报表。并且报表的格式和数据要求每年总有一点变动。为了避免修改程序去升级每个客户端,通过存储过程,只需发一条SQL指令,修改存在服务器上的存储过程就可以实现,对于客户端却没有影响。
三、在人事管理系统中使用存储过程统计报表数据
由于报表涉及大量统计工作,表格中的每个单元格数据都需要通过计算来获得,所以实现的策略是使用存储过程作为水晶报表的数据源,存储过程的任务就是在每一次被调用时生成一张临时表来存储报表中需要的数据,并进行计算将统计数据填充到临时表中。
由于篇幅限制,此处仅分析涉及“专业技术人才管理”报表的存储过程。
系统使用的开发工具有VB6+SQL server 2000+Excel 2000+水晶报表。
存储过程涉及的数据表的主表是教师基本情况表,还有性别表、民族表、政治面貌表、学位表、学历表、职称表、职务表等副表,为了便于维护信息,主表中涉及的性别、民族、政治面貌等信息存储的是对应编号,副表中存储的信息是对应的编号、名称,所采用的编码参考了国家标准。主表(教师基本情况表)的表结构中相关字段设计如下:
(一)在服务器端创建存储过程
1.创建存储过程ZYJSRCQK:
负责生成临时表#ZYJSRCQKB,并调用存储过程SEARCH实现统计报表需要的数据。
Create Procedure ZYJSRCQK
As
BEGIN
create table #ZYJSRCQKB(--创建临时表
XMvarchar(40) null,--项目
DMvarchar(10) null, --代码
C1INTnull,--合计
C2INTnull,--女
C3INT null, --少数民族
C4INT null,--中共党员
C5INT null,--博士
C6INT null,--硕士
C7INT null,--港澳台及外籍人士
C8INT null,--专业技术职务高级
C9INT null,--专业技术职务正高级
C10INT null,--专业技术职务中级
C11INT null,--专业技术职务初级
C12INT null,--学历研究生
C13INT null,--学历大学本科
C14INT null,--学历大学专科
C15INT null,--学历中专
C16INT null,--学历高中及以下
C17INT null,--年龄35及以下
C18INT null,--年龄36~40
C19INT null,--年龄41~45
C20INT null,--年龄46~50
C21INT null,--年龄51~54
C22INT null,--年龄55及以上
PX INT NULL) --排序字段
Insert into #ZYJSRCQKB(PX,XM,DM,
C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,
C15,C16,C17,C18,C19,C20,C21,C22) EXEC SEARCH """其中,在管理岗位工作的""","""2""","GW=""管理""","2"
insert into #ZYJSRCQKB(PX,XM,DM) values(3,"其中,具有职业资格的","3")
insert into #ZYJSRCQKB(PX,XM,DM) values(4,"一、专业技术职务","-")
insert into #ZYJSRCQKB(PX,XM,DM,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,
C15,C16,C17,C18,C19,C20,C21,C22) EXEC SEARCH """高级职务""","""4""","SUBSTRING(ZC,3,1)=""1"" OR SUBSTRING(ZC,3,1)=""2""","5"
insert into #ZYJSRCQKB(PX,XM,DM,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,
热点文章阅读