一种对sql语句进行封装的方法及系统的制作方法

文档序号:6502520阅读:179来源:国知局
一种对sql语句进行封装的方法及系统的制作方法【专利摘要】本发明公开一种对SQL语句进行封装的方法及系统。所述方法包括:获取待封装的SQL语句中每一个输出参数的数据类型;建立自定义类型,所述自定义类型中包括一个或多个变量,每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应;创建包含所述待封装的SQL语句的函数;所述函数至少还包括输出参数,所述输出参数的类型与所述自定义类型相同。采用本发明的方法或系统,可以使用函数对SQL语句进行封装,从而不必输入大量SQL代码,就可以对Oracle数据库进行管理。【专利说明】-种对SQL语句进行封装的方法及系统【
技术领域
】[0001]本发明涉及程序开发领域,特别是涉及一种对SQL语句进行封装的方法及系统。【
背景技术
】[0002]结构化查询语言(StructuredQueryLanguage,SQL),是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。[0003]现有技术中,对于Oracle数据库的管理,一般是输入或者黏贴SQL语句。但是,现有技术中,使用SQL语句对Oracle数据库进行管理时,需要输入大量(通常为上百个字符)的SQL代码,十分复杂。这进一步导致现有技术中,对Oracle数据库的管理效率较为低下。【
发明内容】[0004]本发明的目的是提供一种对SQL语句进行封装的方法及系统,可以使用函数对SQL语句进行封装,从而不必输入大量SQL代码,就可以对Oracle数据库进行管理。[0005]为实现上述目的,本发明提供了如下方案:[0006]-种对SQL语句进行封装的方法,包括:[0007]获取待封装的SQL语句中每一个输出参数的数据类型;[0008]建立自定义类型,所述自定义类型中包括一个或多个变量,每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应;[0009]创建包含所述待封装的SQL语句的函数;[0010]所述函数至少还包括输出参数,所述输出参数的类型与所述自定义类型相同。[0011]可选的,所述SQL语句用于查询数据表中的数据,所述获取待封装的SQL语句中每一个输出参数的数据类型,包括:[0012]登陆SQL*PLUS系统;[0013]从SQL*PLUS系统中获取待查询的数据表中的数据的数据类型。[0014]可选的,所述函数还包括输入参数。[0015]可选的,所述自定义类型包括:子类型,普通类型,或者带成员函数的类型体。[0016]一种对SQL语句进行封装的系统,包括:[0017]数据类型获取单元,用于获取待封装的SQL语句中每一个输出参数的数据类型;[0018]自定义类型建立单元,用于建立自定义类型,所述自定义类型中包括一个或多个变量,每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应;[0019]函数创建单元,用于创建包含所述待封装的SQL语句的函数;[0020]所述函数至少还包括输出参数,所述输出参数的类型与所述自定义类型相同。[0021]可选的,所述SQL语句用于查询数据表中的数据,所述数据类型获取单元,包括:[0022]登陆子单元,用于登陆SQL*PLUS系统;[0023]数据类型获取子单元,从SQL*PLUS系统中获取待查询的数据表中的数据的数据类型。[0024]可选的,所述函数还包括输入参数。[0025]可选的,所述自定义类型包括:子类型,普通类型,或者带成员函数的类型体。[0026]根据本发明提供的具体实施例,本发明公开了以下技术效果:[0027]本发明的对SQL语句进行封装的方法及系统,通过使用函数对SQL语句进行封装,当工作人员需要输入该SQL语句时,只需要调用封装后的函数,就可以实现该SQL语句的功能,从而不必输入大量SQL代码,就可以对Oracle数据库进行管理。【专利附图】【附图说明】[0028]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。[0029]图1为本发明的对SQL语句进行封装的方法实施例的流程图;[0030]图2为本发明的对SQL语句进行封装的系统实施例的结构图。【具体实施方式】[0031]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0032]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。[0033]图1为本发明的对SQL语句进行封装的方法实施例的流程图。如图1所示,所述方法可以包括:[0034]步骤101:获取待封装的SQL语句中每一个输出参数的数据类型;[0035]所述SQL语句可以是执行查询功能的语句。所述SQL语句可以包括多个输出参数,每个输出参数与一个待查询的数据相对应。在Oracle数据库中,待查询的数据可以存储在对象,视图或者表中。[0036]为了获取待查询的数据的数据类型,可以登陆SQL*PLUS系统;从SQL*PLUS系统中获取待查询的数据表中的数据的数据类型。SQL*PLUS是与Oracle进行交互的客户端工具。在SQL*PLUS中,可以运行SQL*PLUS命令与SQL语句。[0037]步骤102:建立自定义类型,所述自定义类型中包括一个或多个变量,每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应;[0038]所述自定义类型可以包括:子类型,普通类型,或者带成员函数的类型体。[0039]本实施例中,之所以要建立自定义类型,是因为执行查询功能的SQL语句的一个特点是,包括多个输出参数,因此,需要用自定义类型,来存储多个输出参数,作为后续步骤中创建的函数的返回值。[0040]每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应,是指某一个变量的数据类型与SQL语句中的一个输出参数的数据类型是相同的。例如,变量a,用来表示SQL语句中的一个输出参数username;如果username的数据类型为varchar2,则变量a的数据类型也为varchar2。[0041]步骤103:创建包含所述待封装的SQL语句的函数;[0042]所述函数至少还包括输出参数,所述输出参数的类型与所述自定义类型相同。[0043]步骤103可以将SQL语句封装成函数的形式。所述输出参数指的是所述函数的返回值。由于步骤102中,建立了自定义类型,用来存储多个输出参数,作为后续步骤中创建的函数的返回值。所以步骤103中,所述输出参数的类型与所述自定义类型相同。[0044]需要说明的是,所述函数根据实际需求,还可以包括输入参数。[0045]本实施例中,通过使用函数对SQL语句进行封装,当工作人员需要输入该SQL语句时,只需要调用封装后的函数,就可以实现该SQL语句的功能,从而不必输入大量SQL代码,就可以对Oracle数据库进行管理。[0046]此外,本实施例中,还采用自定义类型,解决了SQL语句中包含多个输出参数时,对于输出参数的数据类型进行定义的问题。[0047]下面用一个具体例子说明本发明的对SQL语句进行封装的方法,所能达到的效果。[0048]假设现有技术中,需要执行的待封装的SQL语句如下:[0049]SQL>!1selectb.spidospid,2a.username,3a.machine,4a.program,5a.sid,6a.seriai#,7a.status,8c.piece,9c.sql_text10fromv$sessiona,v$processb,v$sqitextc11whereb.spid=&v_ospid12andb.addr=a.paddr13anda.sql_address=c.address(+)14*orderbyc.pieceSQL>/Entervalueforv一ospid:7264old11:whereb.spid=&v_ospidnew11:whereb.spid=7264....省略输出...SQL>[0050]这段SQL代码执行了一个任务,会有一个输出,这段代码太长,影响工作人员的操作效率。这只是一个例子,有些代码会更长。[0051]采用本发明的方法进行封装的过程可以是:[0052]1、建立自定义类型Type。[0053]createorreplacetypetypegetsessioninfoasobject{spidvarcha即4),usernameVARCHAR2{30)/machineVARCHAR2{64)?programvarchar2(48),sidnumber,serial#number,statusvarchar2(8),piecenumber,sql一textvarchar2(1024));/createorreplacetypetab一get一sessioninfoastableoftypegetsessioninfo;/[0054]2、建立函数[0055]函数名为get_sessioninfo。[0056]createorreplacefunctionget_sessioninf〇(v_ospidv$process.SPiD%type)RETURNtab_get一sessioninfoPIPELINEDasvtype_get_sessioninfo;beginformyrowin(selectb.spidospid/a.username/a.machine,a.program,[0057]a.sid,a.serial#,a.status,c.piece,c.sqi_textfromv$sessionafv$processb;v$sqitextcwhereb.spid=v_ospidandb.addr=a.paddranda.sqi_address=c.address(+)orderbyc.piece)loopv:=type_get_sessioninfo(myrow.ospid,myrow.username,myrow,machine,myrow,program,myrow.sid,myrow.serial#,myrow.status,myrow.piece,myrow.sql_text);piperow(v);endloop;return;endget_sessioninfo;[0058]至此,完成了对于上述SQL语句的封装。[0059]当用户需要再次输入上述SQL语句时,只需要调用get_sessioninfo这个函数即可,无需再次输入上述SQL语句。[0060]本发明还公开了一种对SQL语句进行封装的系统。[0061]图2为本发明的对SQL语句进行封装的系统实施例的结构图。如图2所示,所述系统包括:[0062]数据类型获取单元201,用于获取待封装的SQL语句中每一个输出参数的数据类型;[0063]自定义类型建立单元202,用于建立自定义类型,所述自定义类型中包括一个或多个变量,每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应;[0064]函数创建单元203,用于创建包含所述待封装的SQL语句的函数;[0065]所述函数至少还包括输出参数,所述输出参数的类型与所述自定义类型相同。[0066]其中,所述SQL语句用于查询数据表中的数据,所述数据类型获取单元201,可以包括:[0067]登陆子单元,用于登陆SQL*PLUS系统;[0068]数据类型获取子单元,从SQL*PLUS系统中获取待查询的数据表中的数据的数据类型。[0069]所述函数还可以包括输入参数。[0070]所述自定义类型可以包括:子类型,普通类型,或者带成员函数的类型体。[0071]本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。[0072]本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。【权利要求】1.一种对SQL语句进行封装的方法,其特征在于,包括:获取待封装的SQL语句中每一个输出参数的数据类型;建立自定义类型,所述自定义类型中包括一个或多个变量,每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应;创建包含所述待封装的SQL语句的函数;所述函数至少还包括输出参数,所述输出参数的类型与所述自定义类型相同。2.根据权利要求1所述的方法,其特征在于,所述SQL语句用于查询数据表中的数据,所述获取待封装的SQL语句中每一个输出参数的数据类型,包括:登陆SQL*PLUS系统;从SQL*PLUS系统中获取待查询的数据表中的数据的数据类型。3.根据权利要求1所述的方法,其特征在于,所述函数还包括输入参数。4.根据权利要求1所述的方法,其特征在于,所述自定义类型包括:子类型,普通类型,或者带成员函数的类型体。5.-种对SQL语句进行封装的系统,其特征在于,包括:数据类型获取单元,用于获取待封装的SQL语句中每一个输出参数的数据类型;自定义类型建立单元,用于建立自定义类型,所述自定义类型中包括一个或多个变量,每个变量的数据类型分别与待封装的SQL语句中的一个输出参数的数据类型相对应;函数创建单元,用于创建包含所述待封装的SQL语句的函数;所述函数至少还包括输出参数,所述输出参数的类型与所述自定义类型相同。6.根据权利要求5所述的系统,其特征在于,所述SQL语句用于查询数据表中的数据,所述数据类型获取单元,包括:登陆子单元,用于登陆SQL*PLUS系统;数据类型获取子单元,从SQL*PLUS系统中获取待查询的数据表中的数据的数据类型。7.根据权利要求5所述的系统,其特征在于,所述函数还包括输入参数。8.根据权利要求5所述的系统,其特征在于,所述自定义类型包括:子类型,普通类型,或者带成员函数的类型体。【文档编号】G06F17/30GK104142944SQ201310165995【公开日】2014年11月12日申请日期:2013年5月7日优先权日:2013年5月7日【发明者】郭铁志,张宝玉,马向晖申请人:杭州勒卡斯广告策划有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1