开篇:润墨网以专业的文秘视角,为您筛选了八篇sql语言范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!
关键词:SAP; R/3系统; ABAP语言;OPEN sql;数据库
中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)34-1658-02
The Applications of ABAP Language Open SQL Based on SAP R/3 System
JIANG Yong-peng
(Software School,Tongji University, Shanghai 201804, China)
Abstract: The basic knowledge of SAP R/3 system and the ABAP language is reviewed briefly, then from the system's structure, the relevant modules were explained specifically. And the practical examples illustrate the features of the OPENSQL subset which used in this system.
Key words: SAP; R/3 System; ABAPlanguage; OPEN SQL; Database
1 引言
SAP R/3系统是德国SAP公司开发的几乎适用于所有行业的一整套集成化的企业管理系统软件,该系统可以为大中型企业提供从生产到销售等一系列过程的整体解决方案,集资金流、物流和信息流三流合一的有高度的集成性,并且提供了一系列编程接口对它系统进行二次开发。
2 SAP R/3系统概述
2.1 SAP R/3系统架构
SAP R/3系统是一个典型的基于CLIENT/SERVER技术架构的三层服务体系的,开放的,系统的,集成的企业资源计划系统。
1) 表示服务层(Presentation Service)。是基于Windows或X―Windows的SAP前端图形界面;用户通过安装SAP客户端(SAPGUI)来访问SAP。
2) 应用服务层(Application Service)。系统处理及开发平台,也即应用服务器。
3) 数据库服务层(Database Service)。由其他厂商提供的数据库管理系统,如Oracle,DB2,Sybase,Informix等。
2.2 SAP R/3系统采用模组化结构
它们既可以单独使用,也可以和其它解决方案相结合。从流程导向的角度而言。各模块的整合程度越高,它们带来的好处就越多。SAP R/3系统包括十二个产品模块:
SD (销售与分销):积极支援销售和分销活动,具有出色的定价,订单快速处理,按时交货,交互式多层次可变定制功能,并直接与盈利分析和生产计划模组连接。
MM(物料管理):以工作流程为导向的处理功能对所有采购处理最佳化,可以自动评估供货商,透过精确度库存和仓储管理降低采购和仓储成本,并与发票核查相整合。
PP(生产计划):提供各种制造类型的全面处理,从重复性生产,订制生产,订装生产,加工制造,批量及订存生产直至过程生产,具有扩展MPR的功能。另外还可以选择连接PDC,制程控制系统,CAD和PDM。
QM(质量管理):监控,输入和管理整个供应链与品质保证相关的各类处理,协调检查处理,启动校正措施,以及与实验室资讯系统整合。
PM(工厂维护):提供对定期维护,检查,耗损维护与服务管理的规划,控制和处理,以确保各个操作系统的可用性。
HR(人事管理):采用涵盖所有人员管理任务和帮助简化与加速处理的整合式应用程序,为公司提供人力资源规划和管理解决方案。
FI(财务会计):集中有关会计的所有资料,提供完整的文献和全面的资讯,同时作为企业实行控制和规划的最新基础。
CO(管理会计):是公司管理系统中规划与控制的工具的完整体系,具有统一的报表系统,协调公司内部处理业务的内容和过程。
AM(资产管理):电子化地监控固定资产和商品(如零件和原材料),以控制并优化企业资产的使用。
PS(项目管理):协调和控制项目的各个阶段,直接与采购及控制合作,从报价,设计到批准以及资源管理与结算。
WF(工作流程管理): 对企业整个工作运作的流程进行管理,使流程得以最优化。
IS(工业方案):针对特定行业所量身定做的实施方案。
其中,在中国大陆使用较多的是PP,MM,SD,FI,CO,AM,QM和HR模块。
R/3系统所支持的功能是非常多的,为了能够使得R/3系统具有高度的灵活性以及可集成性,R/3系统提供了系统定制这项强大的功能,根据企业的具体业务需要而取舍。但是由于在某些特殊的环境下,系统定制不能够解决企业的具体情况,那么需要利用R/3系统的开发平台以及所提供的ABAP/4编程语言来解决特殊的问题。
3 ABAP语言及OPEN SQL子集介绍
ABAP全称是Advanced Business Application Programming(高级商业应用程序设计语言),它是由SAP公司开发的一种编程语言,用于SAP系统内部商业应用程序的设计开发。ABAP程序是使用ABAP语言开发通过SAP开发平台编译并应用于SAP系统的程序。ABAP程序实现了R/3系统三个层次的数据传递和交互控制。SAP客户使用ABAP进行用户级的开发,即客户化定制开发,这样的开发使R/3标准解决方案能适应各行业的特殊要求。目前ABAP最新版本是ABAP/4,其中不仅包含了事件驱动机制(Event Driven)和模块化(Modularization)技术,还加入了完整的面向对象的概念及实现方法。
ABAP/4开发平台如图1所示。
程序结构:
作为一种时间驱动语言,ABAP程序的源代码包括数据定义和处理快两个部分。1)数据定义:包含整个程序中可见的全局数据类型和数据对象,选择屏幕元素以及ABAP Objects中自定义的类和接口;2)处理块: 是ABAP程序的主要结构单元,定义了程序在不同状态下执行的具体功能,在程序编译运行过程中,每个块都是一个独立的实体。ABAP程序中,数据定义和生命是独立于任何处理快递,其他所有语句都必须隶属于某个处理块。
处理块有三种类型:
1) 事件块:每个事件块都需要有一个时间关键字引导,其后续语句隶属于该关键字的时间块,直到下一个事件关键字出现为止才结束。
2) 对话模块:开始和结束都有相应的关键字作为标志,是相对独立的程序单元。用于用户对话程序。
3) 过程块:开始和结束也有相应的关键字作为标志,包括功能模块和子程序,以及ABAP的类方法,可以被其他模块调用。
每一个ABAP/4程序必须以PROGRAM 或者以REPORT语句打头;一般建议如下,REPORT语句用于ABAP/4 reports,PROGRAM 语句用于一般的ABAP/4程序,全局数据声明必须在程序的起始部分的数据声明部分中,语句体可以包含不同的子模块以完成不同的处理功能。
ABAP程序基本结构如图2所示。
■
图2 ABAP程序基本结构
程序类型:
在创建ABAP程序时均需要制定其类型,程序类型将决定在该程序中可以包含哪些处理块,以及运行环境是如何处理该程序的。主要分为两大类:一类是可以分配事务代码并通过事务代码直接运行的应用程序,往往用于完成一种系统功能;另一类不是为了实现特定功能,可能只是在系统开发过程中具有意义,例如包含程序或功能模块程序,近提供一些模块化的功能,方便系统设计开发,而不是可以直接运行的。
程序元素和语法:
在ABAP程序中,不仅有源代码作为元素,还有变量,属性,文本元素,文档和屏幕等。
一般来说ABAP/4程序由一系列独立的语句组成,每个语句必须以句号结尾,句子中的第一个单词是关键词,词与词之间至少有一个或者以上的空格,语句可以缩进几列,也可以跨越几行,一般来说语句由四个单词组成,除第一个为关键词外,第二、三、四个单词一般为参数、字段、常量等。语句的基本类型及基本性质由关键字确定。如果连续使用相同关键字引导的语句,可以使用关键字后的“:”和语句间的 “,”符号形成语句链,将它们连接在一起,以简化代码。
一个简单的ABAP程序:
REPORT z_simple_program.
DATAtext(20) VALUE 'This is a example'.
START-OF-SELECTION.
WRITE text.
其中REPORT关键字引导的声明性语句表明该程序为可执行程序,该关键字后面接程序名,作为程序开始的标志;第二个语句DATA语句为一个数据声明语句,不属于任何处理块;语句START-OF-SELECTION.是事件块声明语句,表示后续语句隶属于该事件块。
4 ABAP的OPEN SQL子集在SAP R/3系统中的应用及定制
OPEN SQL 是由可以操作R/3系统的核心数据库的ABAP模块组成,所有的操作和报错的结果均是独立于数据库的。OPEN SQL只会作用于是ABAP数据字典创建的数据库表中。在ABAP的数据字典中,你可以把不同数据库中表的列联在一起成数据库视图。在OPEN SQL看来,这些视图跟一般的表可以同等处理。
OPEN SQL 包括一般的SQL语句中的关键字,SELECT,INSERT,UPDATE,MODIFY,DELETE, CURSOR等。
所有的OPEN SQL语句模块都会下列两个返回码:SY-SUBRC 和 SY-DBCNT。其中SY-SUBRC返回码为0时,表示刚刚运行的OPEN SQL语句模块操作成功,否则,表示操作失败失败。而SY-DBCNT则表示刚刚运行的OPEN SQL语句模块操作的数据库表的行数。(下转第1664页)
(上接第1659页)
举一个例子(读一个单行的特定列):
DATA WA TYPE SPFLI.
SELECT SINGLE CARRID CONNID CITYFROM CITYTO
INTO CORRESPONDING FIELDS OF WA
FROM SPFLI
WHERE CARRID EQ 'LH' AND CONNID EQ '0400'.
IF SY-SUBRC EQ 0.
WRITE :/ WA-CARRID,WA-CONNID,WA-CITYFROM,WA-CITYTO.
ENDIF.
这段语句运行后的输出是:
LH0040 FRANKFURTNEW YORK
解释如下:单行(SINGLE)在OPEN SQL 中意味着这段语句将会从名为 SPFLI的数据库表中读取一行单独的条目,这个单在SELECT子句意味着该声明全文一个单一的条目,该数据库表SPFLI的主要关键领域CARRID和CONNID有中WHERE子句需要的具体的数值。该段语句中指定的SELECT 结果转移到相同名称的组成部分的结构WA中。
由例子可见,OPEN SQL 除具有一般的数据库操作功能,更是与ABAP紧密结合,保证了SAP R/3系统实施过程中,多种数据库并存情况下,保证整个数据库数据的统一。
5 结论
从纵览的视角解释了SAP R/3系统以及ABAP语言,并通过实际Open SQL应用的例子,说明了SAP R/3系统在SAP实施过称中对于数据库不统一的情况,OPEN SQL子集的优势。
参考文献:
[1] 黄佳.SAP程序设计[M].北京:机械工业出版社,2005.
关键词:项目教学;共同参与;素质教育
中图分类号:G712 文献标志码:A 文章编号:1674-9324(2017)20-0210-02
一、高职计算机专业学生的特点及其表现
高职院校的学生普遍表现出几个重要的特点,如个性鲜明突出、可塑性强,但是以自我为中心,缺乏一定的集体意识和集体观念等,具体表现为:课堂上愿意表现自己,勇于发表自己的观点。但是,在团体活动的过程中往往缺乏合作的意识,过于鲜明的个性容易导致团队任务的结果差强人意,同时,兴趣广泛,操作能力强。但是,学习动力不足,持续性较差,主要表现为:高职院校的学生普遍有多重兴趣、爱好,如健身、音乐、舞蹈等,因此高职院校的各类社团层出不穷。但是,高职院校的学生往往难以持之以恒,突出表现为他们对待新鲜事物的接受度较高,但是普遍存在“三分钟热度”,难以形成良性地发展。此外,高职院校的学生渴望实现自我价值,但是又往往缺乏艰苦奋斗的精神。对于当前的高职生来说,他们渴望被关注,也渴望自我价值的实现。但是他们对于自我的认知通常是不清楚的,一般表现为过于高估或低估自己的能力,盲目地追求所谓的成功。以上高职计算机专业学生的特点及其表现常常导致高职生难以适应《数据库原理与SQL语言》的课程训练和社会的需求。
二、高职计算机专业学生就业竞争的现状
1.就业供需差异大。随着近年来高校的不断扩招,高校毕业生越来越多,而就业单位的用人需求却呈现出相对稳定的状态,这就导致高职高专的毕业生人数急剧增加,但企业的招聘人数却稳固不前,形成了就业供需差异大的局面。
2.综合实践竞争力低。随着时代的发展,用人单位对毕业生的要求越来越高。除了设置一定的高学历门槛之外,项目实践和实践能力等的要求也越来越高。近年来,企业招聘毕业生逐步从专业型向应用型、创新型人才转变,特别是计算机专业的学生。但是受到传统教学模式的影响,高职计算机专业学生的综合实践能力往往难以达到用人单位的人才标准。这在一定程度上也导致了高职计算机专业学生的就业压力越来越大。
三、项目教学法在《数据库原理与SQL语言》课程中的应用
1.课程分析。《数据库原理与SQL语言》是以培养计算机专业学生的基本理论、知识与技能为核心的全方面素质培养的课程。同时,《数据库原理与SQL语言》在课程设置还加大了学生动手操作的实践课所占的比例,在一定程度上有助于高职院校计算机专业的学生满足社会对应用型人才的需求。此外,《数据库原理与SQL语言》在教材编写上也进行了内容新颖、结构合理、实用性强的内容设计,从知识体系上为高职院校计算机专业的学生提供了强大的技术知识保障。
2.项目教学法的应用。从人才培养目标来看,项目教学法能够根据社会发展需要和学校自身实力为学生树立起正确的人生目标或职业规划,再通过科学合理地安排教学内容,按照理论与实践相结合的方式,针对高职院校计算机专业学生缺乏团队意识和实践能力等方面出发,培养学生的协作精神和实践能力,最大限度地满足社会对人才的需求。同时,项目教学法中还强调自主探究、教学相长的发展意图,通过师生之间的合作,借助真实的项目,将学生学习过的计算机相关的理论内容应用到具体的实践中去,既能保证学习的针对性和实用性,又能提高学生的专业层次水平和实践能力。(1)项目教学法的特点。项目教学法是根据皮亚杰的建构主义理论演变而来的。项目教学法是最适合当前教育模式的一种教学策略,主要表现为:将项目实验作为教学内容的核心组成部分,再通过把握教学环节与整体过程的难点与重点,最终通过师生合作的模式来完成实验项目。其中表现出几个特点:①实验项目与实际生活的联系较为紧密。项目教学法在设计一定的实验项目的时候,往往是让学生自主地选择自己感兴趣的事物作为活动目标,最终在班级内通过小组合作的方式选择最适合的项目作为学习或者是研究的目标。选择研究目标的过程中既可以是全体班级成员选择同一主题进行一定的研究,也可以是几个主题同时进行。②能够有效地培养学生的多种能力,其中主要包括学生的自主探究能力、观察与分析能力、合作与交流能力、发现问题与解决问题的能力等。③教师创造性的发挥。项目教学法作为教学策略的一种,使得教师可以在《数据库原理与SQL语言》的教学过程中充分地发挥其创造性。同时,教师也可以通过指导学生参与到项目研究中去来引导学生自觉、主动地去完成项目作业,进而建构出相对完整的项目操作体系,不仅有助于完成教师的教学目标,而且还有助于提升W生的综合能力。(2)项目教学法的注意事项。①教师作为教学活动的引导者和指导者,在保证学生教学主体地位的同时,也需要引导学生参与到实验项目中来。此外,教师自身也必须进行一定的学习,保证其有足够的理论基础和实践能力,以便可以在实验过程中将数据系统开发等过程详细地展现到学生的面前。需要注意的是,要求教师不断进行其专业素质的培养,主要是因为教师需要及时解答学生在项目实验过程中遇到的问题。②虽然项目教学法追求地是学生的自主探索与合作探究,但是教师要把握好项目教学法的整体教学部分,确保学生的个性化得到充分地发挥。同时,教师也要根据学生的特点因材施教,即根据学生的具体情况选择最适合的方式来开展教学工作。当然项目教学法的应用并不代表着要放弃传统教学方式,而是要实现传统教学方式的创新。在整个项目教学的实践过程中,教师要把握好实践知识与理论知识的结合,通过各个子系统的学习来最终完成整体框架的构建过程。(3)项目的确定及环节设计。根据学生现有的知识体系及能力,结合《数据库原理与SQL语言》的教材内容,以公司数据库管理系统为整体性项目的核心,并结合高职院校的教学资源及就业需求等,将总项目划分为六个子系统,即公司管理数据库的规划与设计、数据库系统的数据查询、数据库系统编程、数据库组建于管理、数据库系统的安全管理等。将整本教材提炼成企业数据库管理系统的构建过程,并且根据《数据库原理与SQL语言》的章节内容对子系统进行具体的划分,最终实现构建整体框架的目标。但是,无论是如何构建整体框架的目标,其最终的目的是要让学生从每一个子项目出发,最终能够在项目实施结束后掌握到各个子系统构建的原理。(4)项目实施过程。根据六个子系统的构建需求,将学生进行一定的分组。这里的分组并不是随便进行的,而是需要教师充分考量到每个小组的人员组成,要保证小组之间的最小差异性。此外,每个项目小组需要选出一名项目经理,负责与项目总负责人和其他项目经理之间的交流及项目小组内任务的安排与分配工作。在项目实施过程中,要强调学生之间的合作与交流。而项目负责人在项目实施过程中主要起的就是把握全局发展方向及引导的作用,不需要过多地干涉其他项目小组的发展。
四、结语
项目教学法是以建构主义相关理论为指导,以实际工程项目为核心,通过创设师生与生生之间的合作模式来实现探究式实践学习的重要手段。项目教学法主要是通过合理化的项目选择,以项目主题、设计项目环节、项目具体实施、总结与反思等四大环节为主要构架,再通过重组与整合一定的知识内容,以创新和实践为主要培养手段,提高高职计算机专业学生的核心竞争力。简单来说,项目教学法就是通过培养学生的知识掌握能力与创新实践能力,从而使学生在《数据库原理与SQL语言》的学习上获得质的提高。
参考文献:
SQL Server拥有管理自身的强大能力,图形化管理工具MMC使得SQL Server管理员能够快速轻松地控制服务器的各个方面。这些工具的底层就是SQL―DM0(分布式管理对象)。SQL―DMO并不是一种新的数据库访问技术,他不关心数据库存储的信息,主要负责数据库本身的结构和维护,以及对包含数据库的SQL Server操作。SQL―DMO允许轻松地开发适合用户环境的定制SQL Server管理应用程序。使用SQL―DMO,可以使用Delphi或者其他OLE兼容语言来创建定制的SQL Server管理界面。该界面允许使用SQL Server企业管理器提供的功能。SQL―DMO允许应用程序执行通过那些SQL Server企业管理器手动实现的功能集。使用SQL―DMO,可以列出数据库和表、增加登陆帐户、控制复制、引入数据、引出数据以及执行其他管理任务。
二、 概述
在安装MS SQL Serve数据库服务器或者Client端的MSSQL Server时,会安装SQL―DMO的编程接口文件:SQI―DMO的编程接口文件名称为8sqldmo hlp,安装在、MSSQL7/Binn/Resoume目录下,在此目录下还可以找到SQL―DMO的帮助文件。参考此帮助文件8sqldmo hlp)可以看到SQ1―DMO所能管理的完整的对象列表以及方法属性列表,在阅读下面的示侧程序时可参考此帮助文件。
在使用Delphi编写数据库界面后,当安装时总是需要进入SQL Server进行操作,需要进行数据库的备份、安装以及帐户的添加等等,会使程序的安装的过程变得十分复杂。通过SQL DMO,我们可以通过调用函数实现在我们的应用程序中实现SQL Server企业管理器的功能,并且使之自动的完成上述功能。
DMO是一种32位OLE COM(组件对象模型),允许应用程序调整SQL Server的管理功能。
SQL Server的DMO是在SQL Server 6中首先引入的,并在SQL Server 7和2000中继续得到增强。
三、 PL/SQL的研究应用
FL/SQL是数据库处理和应用开发语言。它不但具有SQL语言的非过程特性(该特性使用户只需指明要干什么而不必指明要如何干),而且增加了过程化特性,比如,增加了条件控制语句和循环语句。
因此,使用PL/SQL语言将使FORM 及其触发器的设计变得更为方便。并且功能得到大大增强一段用FL/SQL语言设计的代码段被称为FL/其中 DECLARE部分和EXCEPTION部分可缺省。
SQL*Forms以两种方式使用PL/SQL块。一种是无名块,另一种是过程顾名思义,无名块就是没有名的PL/BQL,这意味着能通过定义它的触发器使用无名块。
如果在无名块中没有DECLARE部分和EXCEPTION部分则关键字BEGIN和END可以省略。SQL*Forma在编译前舍自动地给触发器正文加上BEGIN和END若无名块中有说明部分。则关键字BEGIN和END不能省略 PL/SQL需要BEGIN把说明部分和可执行语句部分分开。说明部分主要用来定义PL/SQL块中用到的局部变量、游标和带名的出错处理等。
1 SQL DMO的核心对象分层结构SQL DMO核心对象是按照SQL Server企业管理器同一基本组织的分层顺序进行组织的。核心SQI DMO对象的层次如图所示。
SQL Server的分布式管理对象使用了一种层次体系结构。在SQL Server的DMO对象框架的顶部是应用程序,应用程序下面是SQL Server对象。SQL Server对象表示一种物理SQL Server系统。
在SQL Server对象下面的各种对象集合允许使用SQL Server系统的各个方面。例如,RemoteServers对象集合允许创建和管理远处服务器。同样,Job―Server对象集合允许控制SQL Server的任务、作业和警报。在DataBases集合中的每一个DataBas―es对象表示一个SQL Server数据库,每一个数据库对象包含一个或多个表对象,以及其他类型的SQLServer对象,例如触发器、视图和存储过程。
2 创建SQI DMO
点击主菜单Project,进入Import Type Li―brary,然后选择Microsoft SQLDMO Object Library类型库,选择后点击Create Unit,生成SQLDMOTLB.pas文件,文件中包含所有COM对象。
我们要创建一个SQLserver对象,可在单元的Uses部分添加SQLDMO―TLB.pas,然后调用CoCreate方法。
var oSQLServer:―SQLServer;beginoSQLServer:= LServer.create;oSQLServer.Name: .%ServerName:oSQLServer.LoginTimeout:= 30;oSQLServer.ApplicationName:= ’Login Set―up’;end;
数据库被广捷应用于信息管理系统。ORACLE RDBMS提供有很多应用软件的开发工具。例如,使用SQL Plus建立数据库表;使用SQL*Forms,应用设计员不必编程只需通过选一些菜单,定义一些包含若干触发器的FORM,就可完成应用程序的开发SQLForms生成和运行的是一个十FORM 这种“表格”在ORACLE中是动态的它可对已建立的数据库表根据定义的触发器方便地实现数据的插更新删除、查询、境计等操作 目此,为避免概念上的混淆,一般都直接使用FORM这个词,而不将其称为 “表格”FORM设计过程中的难点之一就是触发器的设计。所谓触发器就是在FORM运行时而被FORM 事件“触发”而执行的代码段。
3 设计FORM
用早期SOL*Forms设计FORM 时,触发器可使用的命夸包括三大类:SQL命令仅允许在SQL*Forms中使用曲SOL*Forms命令用户子程序SOL*Forms由令仅有宏EXEMACRO等四条命令,所以.使用也不方便。
在触发器中还可以调用其它高级语言编写的程序,这类程序在SOL*Forms中称为用户于程序由于用户子程序涉及到高级语言编程以瑟与SQL*Forms的连接所以实现起来也比较复杂,很多资料都建议除非必须 否则最好不要使用用户子程序 由于上述原日 研究功能更强的数据库处理语言是十分必要的。
关键词:VisualFoxPro 教学 重点 方法
VisualFoxPro 是一款由微软(Microsoft)主创开发的一款数据库软件,而且作为灵巧型的数据库的典型代表,其支持面向字符式数据库转向面向对象的风格。如今,在许多专、本科院校对此课程有相对较高的重视度。这门课程的主要教学目标不仅要教会学生如何熟练地管理和操作数据库,更要学生对数据库的交互式操作理解透彻。
一、把握数据库的关系化思想
关系型数据库是建立数据库的最基本也是最重要的思想,其主要的目标就是将库中的所有数据集合关系化。众所周知,数据库是由一系列的数据表组成的,而表与表之间的关系能够很好地构建数据库的模式,这是我们能够形象、具体地使用数据库的根本所在,而且也是我们更便利、快捷地获取数据的条件。
如何规范地设计一个关系型数据库,这是我们教学过程中的重点也是难点。关系型数据库的设计一般遵循三大范式。
第一范式(1NF):是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。在第一范式(1NF)中表的每一行只包含一个实例的信息。
第二范式(2NF):(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。为实现区分,通常需要为表加上一个可以唯一标识的列,该列在一般情况下是整型的自动增长列,可唯一标识。
第三范式(3NF):满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其他表中已包含的非主关键字信息。
二、注重SQL语言的基础教学
SQL已经成为数据库领域中的主流语言。那么,如何精确地讲授SQL语言是最基本的,也是最主要的要求。而初学者在学习SQL语言的过程中往往会出现逻辑不清的状况,其主要的原因是对SQL的阅读和书写能力不足,并且,学生在学习的过程中没有形成良好的SQL编码风格,因此,笔者对SQL语言的学习有以下几点看法。
1.基本语法的教学
数据库的四大基本操作,增(insert)、删(delete)、改(update)、查(select)是对SQL数据库进行操作的基本语句,但通常在这些操作的学习中会出现很多问题,例如:要分清楚子查询和连接查询用法的异同点,子查询在查询表与表之间有联系的信息时必须是外键表中仅有唯一一条记录与主键表相对应,而连接查询能够避免这样的问题。
2.注重良好的编写风格
规范化是清晰编写SQL关键所在。SQL作为一种语言与其他的一些编程语言(如,C,C++,delphi等)有相似之处,很注重逻辑能力。初学者在学习中往往抱着以往“死读书,读死书”的心态,对很多的逻辑混淆不清,这样就不能写出合理的SQL语句。因此笔者通过多年的教学经验对SQL语言的书写方式有以下几点经验。
(1)SQL语言有一点显著的特点就是不对大小写进行区分。在SQL语句的书写时,对表名、列名、视图名等应该进行有效地区分,这样能够保证我们写的语句能够思路清晰,易读。
(2)注释是形成写好SQL语句基础的良好习惯。通常情况下,在大的项目中,我们所书写的SQL代码不是只要求我们自己能看懂而已,而且要使他的开发人员也能很迅速地理解所写SQL的内容,这样就要求我们在书写SQL的同时,写出必要的注释信息。这样在以后阅读难懂晦涩的语句时,我们就能够回忆起原来的编码思路。
三、VisualFoxPro教学方法和建议
实践是掌握知识的最有利的方式,注重实践教学是学生掌握知识的重要途径。笔者认为,学生对VisualFoxPro掌握程度对开设实验课程质量关系重大,因此,要把握选什么样的课题、用什么方式来监督学生的学习、怎么检验学生的实践成果等教学思路。与此同时,学校不断地改革创新教学体系,不断探索合理的、有效率的实践方式。
在教学过程中,我们不仅要鼓励学生多动手,也要鼓励他们多思考。老师可以提出一些比较深层次的问题让学生自己解决,学生也可以跟老师探讨一些感兴趣的问题,形成良好的师生互动,这样能够帮助学生更好地理解这个工具的使用功能。
四、结论
关键词:C;汇编;SQL;综合交叉实验
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)09-2115-02
目前对高校学生仅仅进行知识传授已不在适应素质教育培养目标,而学生的能力培养必须要在逐步的实践过程中增强。实验课环节不仅能够巩固所学理论,而且提高了学生把所学知识转化为实际运用的能力。虽然现在对课程实验环节建设已经比以前有了很大进步,实验的实用性也有一定提高,但大多数学生在面对具体项目时仍觉乏力,原因之一是因为课程实验环节过于单一。因此,可以考虑在教学过程中引入综合实验内容,在一个实验环节中同时应用几个不同课程的知识去解决问题。这样的实验不仅能使学生更好的掌握知识,也极大提高乐学生学习的主动性,启发他们对如何应用所学知识的思考。
1 C、汇编、SQL语言的背景
计算机相关专业学生所须具备的基本能力之一就是对计算机语言的熟练掌握和灵活使用,其中C语言、汇编语言和SQL语言是必须学习和掌握的重要基础内容。
C语言在1978年诞生于美国电话电报公司(AT&T)贝尔实验室,在1983年由美国国家标准学会制定C 语言标准(ANSI C)。早期的C语言主要是用于UNIX系统,由于C语言的强大功能和各方面的优点逐渐为人们认识,到了80年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用,成为当代最优秀的程序设计语言之一。C语言是一种结构化语言,层次清晰,便于按模块化方式组织程序,易于调试和维护。此外,C语言还具有效率高,可移植性强等特点,因此被广泛地移植到各类各型计算机上,形成了多种版本的C语言。目前最流行的C语言有以下几种:Microsoft C 或称 MS C;Borland Turbo C 或称 Turbo C;AT&T C;这些C语言版本不仅实现了ANSI C标准,而且在此基础上各自作了一些扩充。
汇编语言是面向机器的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言的长处就在于编写高效且需要对机器硬件精确控制的程序。汇编语言目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。汇编语言通常是与高级语言配合使用,应用非常广泛。汇编语言的主要应用有:70%以上的系统软件是用汇编语言编写;某些快速处理、位处理、访问硬件设备等高效程序是用汇编语言编写;某些高级绘图程序、视频游戏程序是用汇编语言编写。汇编语言是我们理解整个计算机系统的最佳起点和最有效途径,而学生则经常认为汇编语言的应用范围很小,而忽视它的重要性。
SQL全称是结构化查询语言,是IBM圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,得到了广泛的应用。如今无论是Oracle、Sybase、Informix、SQL server这些大型数据库管理系统,还是像Visual Foxporo、PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言。SQL包含4个部分:数据查询语言SELECT;数据操纵语言INSERT、UPDATE、DELETE;数据定义语言CREATE、ALTER、DROP;数据控制语言COMMIT WORK、ROLLBACK WORK。虽然SQL语言表面看内容不多,但是功能却非常强大,应用非常灵活,但却只需很少时间就能学会,最高级的命令在几天内便可掌握。
从上述内容可知,各门语言都有自己不同的长处和用途,在某些时候,功能完善且强大的C语言也不能替代汇编语言和SQL语言的作用,本文就是想通过C、汇编和SQL语言在实际项目中的综合应用,使学生不在局限于只对一门课程的单一学习,提高学生综合运用知识解决实际问题的能力。
2 计算机语言综合实验教学的应用与研究
Turbo C作为教学语言用的较多,但是Microsoft C更好的提供了数据库、网络、汇编的库函数,该文将采用Microsoft C作为教学实践开发平台,以商业零售行业中前台收银作为实际应用背景进行计算机语言综合实验教学研究。
学生在面对这样一个实际系统时,除了要巩固C语言的基本数据类型、运算符、表达式、程序设计结构、数组、结构体、指针、函数、文件等基础内容,更为重要的是要学习实用且较大型软件(该前台系统主要代码有一万多行)的总体编程思路和编写方法。学生可以从较为底层的位置认识并了解大型软件(包括Windows)采用消息机制的开发思路和主要方法。前台收银系统主程序部分代码如下:
int main(viod) //主函数
{short bLoop=1;
int Result;
double rCal;
char value[81];
//定义消息结构指针
Msg *Message;
//定义台头Panel
TPanel HeadPanel={10,1,1,1,638,62,clSilver,1,,0}
...
InitFone(); //初始化字库
InitGraph(0x12); //进入图形模式
if(GetSystemParam()) //读取系统参数,不成功
InBuffer(-1,CM_CONNECT,0,0); //发送程序关闭消息
else// 发送数据库连接消息
InBuffer(-1,CM_CONNECT,0,0)
//消息循环
While(bLoop)
...}
汇编语言在对底层硬件操作方面,速度更快,效果更好,为了保持在低档POS机上也能够快速显示图形界面,商用前台收银系统采用部分汇编代码对图形处理显得非常必要。通过对此部分的学习,可以使学生深入而具体的了解汇编语言的实际应用,而不是像目前在汇编语言讲授后,学生仅仅对8086(8088)基础知识有简单了解,不知道怎么应用和进一步学习。前台收银系统部分汇编代码如下:
//设置图形模式
viod InitGraph(int INT10)
{reg.x.ax=INT10;
int86x(0x10,®,®,&sreg); //调用中断
}//关闭屏幕显示
viod CloseScr(viod)
{_asm{
mov dx,0x3c4
mov a1,1
...
}}
//打开屏幕显示
viod OpenScr(viod)
{
_asm{
mov dx,0x3c4
mov a1,1
...
}}
实际应用系统几乎都会用到数据库,在目前关系数据库广泛使用情况下,很少有软件程序没有使用SQL语言,SQL语言很少单独使用,大都嵌入到其它语言中。本文中所提到的前台收银系统同样需要大量对数据库操作,需要在C语言中嵌入SQL语言。在Microsoft C中提供了内嵌SQL语言所需库函数,为我们使用SQL操作后台数据库提供了应用基础。前台收银系统内嵌SQL代码示例如下:
void sql_initbc()
{
char tmpjbsj[9],tem[9]="00:00:00",nDate[11];
DBINT xsbs=0,maxlsh=0;
DBCHAR tem_scjbsj[30],dMaxTime[21],bcMax[7];
//提示
Printf("\n\n取收银机上次交班时间:",clSilver);
sprintf(_bvalue,"select JBSJ from QTSY_SYJB where SYJH=$s...",Param.SyjNo);
Printf(_bvalue,clSilver);
sql_time(g_now); //取当前日期时间
uf_strmid(nDate,g_now,0,10) //分离日期
if(_syfs==0||dbproc==NULL||DBDEAD(dbproc))
{
...
}
else
{
...
}
}
3 结束语
该文通过商业自动化前台收银系统的实际应用开发,完成了C语言、汇编、SQL三门课程的深入实践,既巩固了多门课程内容又熟悉了各种语言工具之间的联系方式。这样的综合交叉实验环节如果仅是部分实行,在设计上难度不大,但是带给学生的收获却非常大。通过综合实验教学,可以使部分学生在编程思路和知识应用方面接近目前高校本科毕业设计水平,使得毕业后能够基本满足企业在程序设计方面的用人要求。
参考文献:
[1] 迟成文. 高级语言程序设计[M]. 经济科学出版社.
关键词:PL/SQL 指标管理系统 设计 实现
中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2015)05-0000-00
指标管理作为一种定量和定性的管理手段在企业生产经营管理中的作用越来越被重视起来,一方面通过指标管理管理的开发整合了企业生产管理过程中的各类数据,为企业搭建起数据中心;另外,指标管理系统直接服务于企业的各类管理者,对于企业生产经营决策也具有重要的作用和意义。
指标管理系统的开发通过理对企业生产管理全范围的数据进行分析,梳理元数据和基础数据,开发面向部门、公司、集团等不同层面的指标分析场景和报表,通过这个过程搭建并完善公司的指标管理体系,并使这个体系进入实际有效的运转。
1 PL/SQL简介
SQL (Structure Query Language)是一种第四代语言(4GL),它是目前各类关系型数据库中最通用的数据库操作语言。PL/SQL是Oracle公司在标准SQL语言上进行的扩展,在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。PL/SQL的使用,使SQL成为一种高级程序设计语言,支持高级语言的块操作,条件判断,循环语句,嵌套等,与数据库核心的数据类型集成,使SQL的程序设计效率更高。
2生产绩效指标管理系统
生产绩效指标管理系统是与某核电运营公司共同开发,项目内容包括指标管理与数据管理后台管理系统:实现指标和数据定义,数据采集和维护等功能;面向BI分析的数据仓库开发,以及面向分析的数据查询和BI场景分析门户三部分内容。项目一期开发的指标包括发电,安全及WANO指标。
3数据与指标计算设计
生产绩效指标管理系统后台管理部分实现数据和指标定义、数据采集、系统管理等功能。本系统提及的指标是指阈值指标,即通过相关数据给出指标的评价,红黄绿蓝(部分定义了四级阈值的指标存在蓝色阈值逻辑),即面向定性分析;数据包含基础数据和指标数据,例如发电量计划完成率的阈值计算逻辑:
红色阈值逻辑条件:年末预测发电计划完成率小于98%;
黄色阈值逻辑条件:年末预测发电任务完成率小于100%且年末预测发电任务完成率大于等于98%
绿色阈值逻辑条件:年度累计发电计划执行率大于100%且年末预测发电计划完成率大于等于100%;
指标的配置过程中,设计了参数表,上述发电量分析指标,包含了两个参数,
A:年末预测发电任务完成率
B:年度累计发电计划执行率
指标的阈值配置如下:
红色阈值逻辑条件:A < 98 ;
黄色阈值逻辑条件:A < 100 && A>=98 ;
绿色阈值逻辑条件:B > 100 && A >100 ;
指标数据,例如年度累计发电计划执行率,包含了两个参数:
A:年度累计发电量
B:年度累计计划发电量
计算公式配置为:A/B*100 。
3.1JAVA程序计算
基于JAVA程序的计算的一个重要的思路就是引用JEP,JEP是Java expression parser的简称,即java表达式分析器,Jep是一个用来转换和计算数学表达式的java库。通过这个程序包,用户可以以字符串的形式输入一个、任意的公式,然后快速地计算出结果。Jep支持用户自定义变量、常量和函数。包括许多常用的数学函数和常量,可以实现数值计算和逻辑计算。按照JEP的逻辑的实现原理,用户可以管理指标的计算公式,并实现可扩展、可维护以及可验证。指标数据和指标阈值的定义如前文所述,下面阐述其实现的原理和例子解析。
//引用jep-3.3.0-trial.jar
public class FunRGBCompute {
public static Object getValue(Map map, String fun){
try{
if(null == map)
return null;
if(map.size() < 1)
return null;
if(null == fun || "".equals(fun.trim()))
return null;
Jep jep = new Jep();
for (String key : map.keySet()) {
String value = map.get(key).trim();
double num = 0;
try{
num = Double.valueOf(value);
jep.addVariable(key, num);
}catch(Exception e){
try {
boolean isBoolean = Boolean.valueOf(value.trim().toLowerCase());
jep.addVariable(key, isBoolean);
} catch (JepException e1) {
}
}
}
jep.parse(fun);
Object result = jep.evaluate();
return result;
}catch(Exception e){
return null;
}
}
//样例测试
public static void main(String[] args){
Map map = new HashMap();
map.put("D10001", "100");
map.put("D10002", "200");
map.put("D10004", "280");
map.put("D10005", "400");
//测试1、逻辑表达式
String fun = "D10001+D10002>D10005";
Object result = FunRGBCompute.getValue(map, fun);
System.out.println(result);
//测试2、算术表达式
fun = "(D10001+D10002-D10004)/D10005";
result = FunRGBCompute.getValue(map, fun);
System.out.println(result);
}
}
3.2基于PL/SQL存储过程计算
基于PL/SQL的计算,包括PL/SQL的存储过程、函数和定时任务处理。基本的实现逻辑是读取指标数据和指标阈值的设置,进行解析,计算出结果。这里涉及的采集数据存储表、参数定义表、阈值结果存储表、指标数据存储表同“(1) JAVA程序计算”,差异在于,基于PL/SQL存储过程计算,将计算公式的解析和计算过程交给了Oracle数据库段的PL/SQL 存储过程以及函数。
指标数值和指标阈值计算的逻辑实现如下:
Function Get_Value(itemCode VARCHAR2,
calculationFormula VARCHAR2,
valueDate date) Return NUMBER AS
n_value NUMBER;
v_string VARCHAR2(4000);
v_sql VARCHAR2(4000);
v_r VARCHAR2(1000);
cursor myCur is
select fm.fmla_item_co_pr, nvl(rt.data_value, 0) data_value
from PIMS_DATA_REF_DATA fm, PIMS_DATA_STORE rt
where fm.fmla_item_co_pr = rt.item_code_prefix(+)
and rt.data_date = valueDate
and fm.item_code_prefix = itemCode;
begin
if calculationFormula is null then
--如果公式为空,这指标数据默认为null
n_value := null;
else
v_string := '''' || calculationFormula || '''';
--循环公式指标,将指标替换成对应数据
for c in cur1 loop
v_string := 'replace(' || v_string || ',''[' || c.FMLA_ITEM_CO_PR ||
']'',''' || c.data_value || ''')';
end loop;
--将替换后的表达式字符串赋值
v_sql := 'select ' || v_string || ' from dual';
execute immediate v_sql into v_r;
commit;
--将字符串里的--替换成+,要不然会出错
v_r := replace(v_r,'--','+');
--这里最后判断一下最后的表达式里是否还存在没有替换的指标
if instr(v_r, '[') > 0 or instr(v_r, ']') > 0 then
n_value := 0;
else
--执行表达式
v_sql := 'select ' || v_r || ' from dual';
execute immediate v_sql into n_value;
commit;
end if;
end if;
--返回数据
return n_value;
--异常处理
exception
when Others then
--日志表中记录异常,供后续分析
return null;
END Get_Value;
数据库相关设计如下
PIMS_DATA_REF_DATA存储指标数据计算的参数设置信息,fmla_item_co_pr为参数的主键;item_code_prefix 为计算的指标数据的主键
PIMS_DATA_STORE存储采集的基础数据表,item_code_prefix为数据的ID,data_date为数据日期,data_value为数据值。
在项目实现上设计了一个指标数据计算的清单表,在该清单中维护了指标的计算顺序。通过编写一个Oracle Job来实现定期调用对应的计算公式,获取整个系统的计算周期的数值和阈值。
4实现效果及评价
采用JAVA程序计算和PL/SQL存储过程计算两种,都实现了指标数据和指标阈值计算的可扩展、可维护和易于验证性;解决了这一个系统上线之初的一个核心问题,但是随着数据量的增涨,两者存在较大的差异。
该系统以控件形式嵌入医院信息管理系统中(HIS),在药物咨询及用药安全检测系统这个环节上,借鉴杀毒软件思路,对存在超量用药、禁忌症、配伍禁忌等可能对患者形成药害的多种情况处方,建立起一套用药安全监测系统,实时警告、提示、显示、避免药害事故发生。在医院已有的一套HIS系统的前提下,将《药物咨询及用药安全监测系统》分别嵌入医生工作站、药房工作站、护士工作站、静脉输液配置中心等。给每个医生开处方时把关和查询相关药物信息的一套系统,有了一这套操作系统似乎不合格处方就不会出现了,因为一旦出现重复用药、用药禁忌、药物相互作用等情况,操作系统就会亮警示灯,电子处方就不能形成,而且医生再也不用去查其他药物书籍,每种药物的相关信息都上面都能查到,那个推销员说医生有了这一个操作平台,临床药师就都下岗了。虽然只看到演示版,我感觉这个软件应该比我们临床药师要有用的多,对于不合格处方,有争议的处方,电脑是不讲人情的,电子处方不能形成,医生就得改处方。
山东省滨州市一家医院药房的赵药师最近比较困惑:自从医院实行电子处方以后,他作为住院部药师,再也无法对医生处方进行把关了。目前也有一些医院电子处方的审方系统已较为完善。中国人民总后卫生部药品管理部门自2000年起在原有医院药物咨询及用药安全检测系统系统的基础上,安装了药物咨询及用药安全检测系统,在15家试点医院获得成功。而国际上,研究医院信息系统中最有效益的药学子系统的各国经验也证明,药物咨询及用药安全检测系统与审方EP/EPM是最有挑战性与效益的工作。美国政府近年来不断加强医疗卫生系统的信息通讯技术ICT建设(如自动发药机、送药机器人、药品条码机、单剂量自动包装机及处方自动监测软件等),作为提高医疗用药安全保障建设的重点。1993年,美国首先以具备管理与装备优势的军队医疗作试点,给所有军队医院安装了含药物咨询及用药安全检测系统的综合性医院计算机系统,用药合理性大为提高。长海医院2000年在院内局域网的基础上安装了药物咨询及用药安全检测系统,医生和药师在各自的工作站都能很顺利地打开这个系统。该系统的功能主要是检查医生处方的合理性,医生在电脑上下医嘱的时候,如果两种药物有配伍禁忌,系统就会亮红灯提示。医生输入治疗方案后传输到药房,中心摆药室的药师也能够看到每一个病人的用药情况即医嘱清单,还可以查看病人的病历和实验室检验报告,药师在审方中若有疑问,可与医生联系,以确认或修改等。在完成药师审核确认这个程序之后,医嘱清单才自动进行药品费用记账,按科室汇总打印药品清单,最后按科室发药。“当然,此系统最多是一个提示功能,医生主要是根据病人的病情用药,如果病人的情况特殊需要打破常规用药,那医生就要特意说明并签字。”孙华君强调说。
因此,医院的HIS系统也应该不断更新换代。我院的HIS系统能实现每个患者的独立处方请领,但在实际工作中,我院还是调派药师深入到病房中,抽查病历,发现问题或是对某些用药有疑问时,即与医生联系,协商分析解决。随着电子处方和电子病历的使用,利用计算机对各科处方药品进行统计汇总将会变得很简单,也大大减轻了药房工作人员的劳动强度。但是,这样会把药师的地位逐渐推向低谷。我认为药师的出路是把处方审核的阵地前移,通过深入病区,了解医生的用药特点,提出合理建议;通过与医生合作,处理和上报ADR,提高药师在临床工作中的地位……这些工作要做好很难,甚至要付出巨大努力,但现实就是这样,越简单轻松的工作越容易被取代,只有越来越有挑战性的工作才更具有生命力。
第二章药物咨询及用药安全检测系统的网络技术分析
2.1SQL数据库简介
SQL(StructureQueryLanguage)是关系型数据库管理系统[14]中最流行的数据查询和更新语言。用户可以使用SQL语言在数据库中执行各种操作。SQL查询语言包括了所有对数据库的操作,这些操作可以分为四个部分,即数据定义语言、数据操纵语言、数据控制语言、和嵌入式SQL语言。其功能如下所示:
(1)数据定义语言(DataDefinitionLanguage,DDL)主要是定义数据库的逻辑结构,包括定义基本表、视图和索引。从用户的角度来看,基本的DDL包括三类语言,即定义、修改和删除。
(2)数据操纵语言(DataManipulationLanguage,DML)包括数据检索和数据更新两大类操作,其中数据更新包括插入、删除和修改三种操作。
(3)数据控制语言(DataControlLanguage,DCL)包括基本表和视图的授权、完整性规则的描述以及事务开始和结束等控制语句等。
嵌入式SQL语言规定了SQL语句在宿主语言程序中使用的各种规则。它的广泛地被采用正说明了它的优点。它使全部用户,包括应用程序员、DBA管理员和终端用户受益非浅。
SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。所有SQL语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。SQL不要求用户指定对数据的存放方法。这种特性使用户更易集中精力于要得到的结果。所有SQL语句使用查询优化器,它是RDBMS的一部分,由它决定对指定数据存取的最快速度的手段[2]。查询优化器知道存在什么索引,使用在哪儿合适,而用户从不需要知道表是否有索引,表有什么类型的索引。
SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。基本的SQL命令只需很少时间就能学会,最高级的命令在几天内便可掌握。SQL为许多任务提供了命令,包括:
查询数据在表中插入、修改和删除记录,建立、修改和删除数据对象,控制对数据和数据对象的存取,保证数据库一致性和完整性。以前的数据库管理系统为上述各类操作提供单独的语言,而SQL将全部任务统一在一种语言中。
由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一个。所有用SQL编写的程序都是可以移植的[15]。SQL是PostgreSQL(和大多数其它关系型数据库)用做查询语言的语言。它是可以移植的,并且容易学习使用。但是所有SQL语句都必须由数据库服务器独立地执行。这就意味着客户端应用必须把每条查询发送到数据库服务器,等待它处理这个查询,接收结果,做一些运算,然后给服务器发送另外一条查询。所有这些东西都会产生进程间通讯,并且如果客户端在另外一台机器上甚至还会导致网络开销。如果使用了PL/pgSQL,那么可以把一块运算和一系列查询在数据库服务器里面组成一个块,这样就拥有了过程语言的力量并且简化SQL的使用,因而节约了大量的时间,因为用不着付出客户端/服务器通讯的过热。通过使用PL/pgSQL,应用可以获得可观的性能提升。
2.2dotnet介绍
编程人员在使用开发应用程序时需要注意的7个技巧,这些技巧涉及从缺省的控件、表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET环境。
1.在使用时,除直接或非引用的对象外,不要使用缺省的名字。
.NET带来的好处之一是所有的源代码和配置文件都是纯文本文件,能够使用Notepad或WordPad等任意的文本编辑器进行编辑。如果不愿意,我们并非一定要使用作为集成开发环境。但使用了,我们可以在Windows文件管理器中看到文件,或在之外从文本编辑器中浏览文件的内容。
使用作为集成开发环境有许多好处,其中最显著的好处是它极大地提高了生产效率。使用,我们能够在付出较小代价的情况下更快地开发软件。作为集成开发环境一部分的IntelliSense提供自动的代码完成、在输入方法或函数时提供动态帮助、语法错误的实时提示,以及其他能够提高生产效率的功能。
象其他复杂的工具那样,在学会如何充分发挥它的作用和掌握其“习性”前,也会使我们产生一种挫折感。有时,它象一个难以了解的黑盒子,会生成大量的文件和许多无用的代码。
的一个功能是,无论是类、控件或表单中的对象,它都能够为新对象提供缺省名字。例如,如果我们创建了一个新的WebApplication,其缺省的名字将是WebApplication1。我们可以在“新工程”对话框中方便地改变该应用的名字,但同时改变的只是该应用程序的名字空间的名字及其所在的虚拟目录,源代码文件的缺省名字仍然是WebForm1.aspx和WebForm1.aspx.cs(C#工程)或WebForm1.aspx.vb(工程).
2.即使不使用进行编程,使用代码支持文件也有利于提高应用程序的性能
在Web应用程序、Web服务或Web控件等所有的Web工程中,都使用代码支持文件。代码支持文件使工程具有更好的组织、模块性,更适合多人组成的开发团队。另外,它还会带来性能的提高。
代码支持文件的内容被编译成一个组合文件中的类,一般是一个DLL文件,有时也可以是EXE文件。该文件驻留在应用程序的组合体高速缓冲区中,在应用程序启动时,可以立即得到它。
如果代码是包含在<script>标记中或ASPX文件代码中,它仍然会被编译成一个Web页类。在这种情况下,每当该网页在应用程序对话中第一次加载时,都需要重新进行编译,被编译的类就会驻留在内存中。每当计算机启动、IIS停止、重新启动或者源代码、配置文件改变时,该文件必须重新编译。尽管不大,但这样引起的性能损耗也是相当可观的。
3.尽量减少表单回送
每当点击Web网页上的Button、LinkButton或ImageButton控件时,表单就会被发送到服务器上。如果控件的AutoPostBack属性被设置为true,如果CheckBox、CheckBoxList等控件的状态被改变后,也会使表单会发送回服务器。
每次当表单被发送回服务器,就会被重新加载,启动Page_Load事件,执行Page_Load事件处理程序中的所有代码。把网页的初始化代码放在这里是最合适不过的了。我们经常会希望在每次加载网页时执行一些代码,而希望只有在网页第一次加载时执行另一些代码,甚至希望一些代码在除首次加载外的每次加载时执行。
可以利用IsPostBack特性来完成这一功能。在网页第一次加载时,该属性的值是false。如果网页因回送而被重新加载,IsPostBack属性的值就会被设置为true。通过测试,可以在任意时候执行指定的代码。
4.使用StringBuilder类
字符串在.NET框架中是不可变的,这意味着改变字符串的操作符和方法会返回字符串的改变后的拷贝,这意味着性能还有提高的空间。当进行大量的字符串操作时,使用StringBuilder类就是一种比较好的选择了。
5.只在必要时使用服务器端控件
中新引入了一种在服务器端运行的被称作WebServerControls的控件,在代码中,它们经常通过下面的语法被说明:
<asp:TextBoxid="txtLastName"size="40"runat="server"/>
它们有时也被称作ASP控件。服务器端控件是由runat属性指示的,它的值总是“server”。
通过添加runat属性,一般的HTML控件可以被很方便地转换到服务器端运行,下面是一个简单的例子:
<inputtype="text"id="txtLastName"size="40"runat="server"/>
可以通过id属性中指定的名字,我们可以引用程序中的控件,可以通过编程的方式设置属性和获得值,因此,服务器端处理方式有较大的灵活性。
这种灵活性是有一定代价的。每种服务器端控件都会消耗服务器上的资源。另外,除非控件、网页或应用程序明确地禁止viewstate,控件的状态是包含在viewstate的隐藏域中,并在每次回送中都会被传递,这会引起严重的性能下降。
在这方面的一个很好的例子是,网页上控件表格的应用,如果不需要在代码中引用表格中的元素,则使用无需进行服务器端处理的HTML表格。我们仍然可以在HTML表格单元中放置服务器控件,并在代码中引用服务器控件。如果需要引用任意的表格元素,例如指定的单元,则整个表格必须是服务器控件。
6.HyperLink控件、LinkButton控件的差别
对于Web访问者而言,HyperLink、LinkButton控件是一样的,但它们在功能方面仍然有较大的差异。
当用户点击控件时,HyperLink控件会立即将用户“导航”到目标URL,表件不会
7.注释代码
这一技巧并不是针对的,但它是一个良好的编程习惯。
注释不仅仅应当说明代码会执行什么操作,还应当注明原因。例如,不要仅仅在注释中说明是在遍历数组,而是要说明遍历数组是根据某一算法计算一个值,除非算法是相当简单的,否则还应当对算法进行简要的说明。
.NET工程中的不同的编程语言都有各自不同的注释符号,下面是一个简要的说明:
HTML<!--注释-->
javascript//注释
VBScript''''注释
''''注释
C#//注释
/*多行内容
的注释
*/
SQL--注释
在服务器控件的开始和结束标记中没有注释符号,但服务器能够忽略掉所有它不能识别的属性,因此我们能够通过使用没有定义的属性来插入注释。
2.3ibm的db2
数据库的概念结构设计是反映全组织信息需求的整体数据库概念结构(概念模式)。概念模式必须是独立于计算机硬件和具体数据库管理系统,不受特定DBMS(数据库管理系统)的限制,不考虑计算机软硬件技术细节。在需求分析阶段得到的数据流程图对数据的动态运动轨迹进行了描述,数据库需求分析定义了数据本身的静态特征,但他们反映的仅是应用需求,并无反映出数据之间的本质联系(即数据的内在特征)。
DB29的开发者工作台(DB2DWB,DB2DeveloperWorkbench)替换了DB28中的开发中心。DB2开发者工作台是一个基于Eclipse的图形化环境工具,用来支持DB2SQL和Java存储过程的快速开发、SQL标量用户自定义函数(UDF)和用户自定义表函数、SQL语句、XQuery语句以及WebServices等。此外还有很多尚未列出的功能。比如,DB2DWB包含一个SQL编辑器,该编辑器具有丰富的语法高亮彩色显示、代码辅助以及团队开发支持和比较工具等功能。
DB2DWB是一个单独的工具,并且可以独立于DB2数据服务器进行维护,可以在IBM网站下载该工具www/jct03001c/software/data/db2/ad/dwb.html。
DB2DWB实际上是为数据库管理员而不是为代码专家准备的,但是它需要为数据服务器业务逻辑创建提供快速开发的协助。根据系统的具体环境,用户可以选择使用类似ToadforDB2或者VisualStudio的其他工具。虽然使用DB2DWB是免费的,但是纯粹的开发人员更倾向于将这种DB29所提供的插件嵌入到相关的IDE当中。大多数情况下,用户可以在任何一个IBM产品或者某个具体IDE的集成环境下执行相同的任务。如图2-1。
系统功能:
(1)要点提示显示功能;
(2)药物过敏史审查;
(3)老年人用药审查;
(4)儿童用药审查;
(5)妊娠期妇女用药审查;
(6)禁、慎用药审查;
(7)药品超剂量审查;⑻给药途径审查;
(8)药品分类查询;
(9)药物咨询;
(10)适应症查询;
(11)肝、肾功能不全用药量调整;
(12)FDA妊娠期药物分类查询;
(13)抗菌药物指导原则相关查询;
(14)抗生素分类及禁慎用症;
(15)检验值与诊断;
(16)常用医学公式;
【关键词】Entity Framework;网站;绑定
一、引言
在传统的.net网站编写时需要查询数据源,就必须使用传统 技术,虽然传统 把数据库转换成DataSet技术执行效率较高,但编写复杂,必须拼写出一长串的SQL语句才能得出数据,这样在程序编写过程中无法判断SQL语句是否正确,很容易出现SQL注入风险,对于不同的数据库编写的SQL语句也必然有微小的区别,导致开发人员必须要掌握多种数据源的操作方法,才能够熟练地进行网站开发。
为了解决这些问题,提高开发效率,对象/ 关系映射(Object/Relational Map- ping,ORM)技术应运而生。 Entity Framework 是微软以为基础发展出来的ORM解决方案。在Entity Framework中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义。
概念架构定义语言文件 (.csdl) ——概念模型定义。
存储架构定义语言文件(.ssdl) ——存储模型定义(又称逻辑模型)。
映射规范语言文件(.msl) ——存储模型与概念模型之间的映射定义。
概念模型(.csdl)对应了程序中需要使用的类,存储模型(.ssdl)对应了程序中需要使用数据表,二者通过映射规范语言(.msl)文件进行了对应,这样数据表成功的映射成为实体对象,实体框架使用这些基于XML 的模型和映射文件将对概念模型中的实体和关系的创建、读取、更新和删除操作转换为数据源中的等效操作。EDM 甚至支持将概念模型中的实体映射到数据源中的存储过程。它提供以下方式用于查询EDM 并返回对象:
LINQ to Entity ——提供语言集成查询(LINQ) 支持用于查询在概念模型中定义的实体类型。
Entity SQL ——与存储无关的SQL 方言,直接使用概念模型中的实体并支持诸如继承和关系等EDM 功能。
查询生成器方法——可以使用LINQ 风格的查询方法构造 Entity SQL 查询。
2007年,微软将LINQ作为.NET Framework 3.5中的一部分正式开始推出,它首次使用了一种类似于SQL语句的语法形式统一了对整个.Net Framework框架下的数据源的操作,从而使开发人员只需要使用简单的LINQ语句就可以查询出不同数据源的数据。LINQ的语法很像SQL语句但又有所不同,它的关键词包括:from、in、where、order by 、select、group by,此外必须要以select或者group by结尾。
它的语法格式为:var临时变量=from临时变量in集合对象或数据库对象
where 条件表达式
[order by条件]
select 临时变量中被查询的值
[group by 条件]
此外,LINQ还支持大量的SQL语法,例如Avg,Sum,Count等等。
由于引入了LINQ to Entities作为中间层查询、插入、更新和删除操作全部使用LINQ语句实现,再通过Entity SQL转换LINQ语句为具体数据库的SQL语句,实现了与数据库无关性,降低了开发人员学习复杂度,提高了效率。
二、LINQ to Entity 访问数据库
LINQ to Entity 创建ObjectContext封装实体类,此类作用是“创建”、“读取”、“更新”和“删除”操作,并提供查询所需要的linq语句。类名为:XJZXEntities派生自ObjectContext类,所使用的是华夏学院现代教育技术中心网站的数据库。XJZXEntities xjzx = new XJZXEntities();通过这个类的实例可轻松实现各类数据库操作,以下代码使用LINQ to Entity 实现数据表Tb_Common_Role(权限)插入查询操作:
实现数据表Tb_Common_Role(权限)插入操作:
实现数据表Tb_Common_Role(权限)插入操作:
实现数据表Tb_Common_Role(权限)删除操作
实现数据表Tb_Common_Role(权限)更新操作
Entity Framework可以非常方便的实现各种数据表的插入、删除、更新、查询操作,注意每张数据表必须要有对应的主键,如无主键执行过程中会出现错误。
三、Entity Framework与 Web控件的绑定
提供了许多xxxDataSource控件,如SqlDataSource,ObjectDataSource等,这些数据源控件大大方便了我们的数据绑定操作。不幸的是目前还没有针对Entity Framework的数据源控件,但是将数据绑定到诸如ListBox,Gridview或DetailsView控件也是很简单的。这源于使用ObjectContext操作返回的IQueryable对象或是使用EntityClient查询返回的ObjectQuery对象都实现了IEnumerable接口。以Gridview为例,代码示例如下:
这样很容易将这些数据绑定到数据控件并在网页上显示结果。
四、Entity Framework分页语句研究
在linq中提供了take和skip实现分页操作,Take: 返回前N条记录,丢弃剩余部分,SQL对应语法为TOP n子查询;Skip:跳过前N条记录,返回剩余部分,SQL对应语法为Where ROW_NUMBER()或者NOT IN(Select Top N…)其代码如下:
Skip语句使用的是Sql2005 版本才出现的ROW_NUMBER方法进行分页,其代码在Sql2005 和Sql2008上执行效率高的惊人,Entity Framework内建的skip limit分页生成的分页语句对oracle 和sql2005以下的版本无效,根本原因是其使用的ROW_NUMBER方法在oracle 中与 mssql中的函数意义不一样,而sql2005以下版本根本没有ROW_NUMBER,造成其在oracle和sql2000中分页失效。经过研究对比生成的Sql语句发现,只要替换掉Skip就可以修正这个问题具体代码如下:
这样做虽然降低了一点执行效率,但代码通用性得到了加强,在oracle和sql2000中不用修改代码即可使用。
五、Entity Framework更改数据库的连接字符串
默认情况下(Visual Studio对Entity Framework数据项目的默认设置),EDM这个XML文件被作为资源在编译时嵌入到程序集中。这种情况下当更改EDM后需要重新编译这个程序集才能 使更改生效。通过更改项目属性也可以让EDM作为三个独立的XML文件存在于项目中。为了让应用程序可以找到EDM(无论其以什么方式存储)需要一个链接 字符串来指示EDM所在的位置。实体模型设计器生成的链接字符串如下所示:
关键的一点应用程序是怎样找到这个字符串的,对于使用EntityClient的情况,可以直接将连接字符串赋给EntityConnection的ConnectionString属性,另外对于使用ObjectContext,其可以自动由配置文件检索这个连接字符串。
六、结语
使用Entity Framework 可以非常简单的把关系型数据源通过XML 文件定义为对象类,并用这些类完成数据访问,大大提高了数据访问层编程效率。虽然EDM在数据访问时跟SQL 语句比效率有待提高,但是其灵活方便的使用必将替代 SQL语句拼接方式,成为 平台主要数据访问方式。
参 考 文 献