一种存储过程处理方法和装置与流程

文档序号:13682898阅读:188来源:国知局

技术领域
本发明涉及数据库技术,尤其涉及一种存储过程处理方法和装置。
背景技术
:存储过程(英文:StoredProcedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集(即SQL代码),经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用它。存储过程是数据库中的一个重要对象,可用于报表开发。报表开发过程一般分为两个步骤:数据准备和显示样式设计,其中数据准备一般有如下几种方式:第一种:直接编写结构化查询语言(英文:StructuredQueryLanguage,简称:SQL)语句;第二种:通过拖拽图元的方式进行数据表建模,自动生成SQL语句;第三种:调用存储过程。其中,第一种和第二种方式最终会生成一个查询视图,而查询视图支持对数据的二次处理,第三种方式最终仅仅是返回一个结果集,然而结果集是一个已经固定的记录集,只能读取数据,不支持对数据的其他任何操作。早期报表大部分都是用存储过程开发的,由此积累了大量基于存储过程开发的报表,但是由于存储过程最终返回的结果集不能进行二次处理,而存储过程是编译在数据库系统中的,不能随意修改,降低了存储过程使用的灵活性。技术实现要素:本发明实施例提供一种存储过程处理方法和装置,用以解决因现有技术中无法对存储过程返回的结果集进行二次加工处理,造成存储过程使用灵活性降低的问题。第一方面,本发明提供了一种存储过程处理方法,该方法包括:当从检测到的访问请求中识别出第一存储过程名时,根据所述第一存储过程名获取所述第一存储过程的SQL代码;基于所述第一存储过程的SQL代码生成第二存储过程;执行所述第二存储过程,得到所述第二存储过程的返回结果;所述第二存储过程的返回结果为与所述第一存储过程的返回结果对应的SQL语句;基于所述第二存储过程返回的SQL语句生成所述第二存储过程的查询视图的SQL代码;执行所述第二存储过程的查询视图的SQL代码,生成所述第二存储过程的查询视图。结合第一方面,在第一方面的第一种可能的实现方式中,从检测到的访问请求中识别出第一存储过程名,包括:根据预定义的关键字,从检测到的访问请求中识别出第一存储过程名。结合第一方面,在第一方面的第二种可能的实现方式中,基于所述第一存储过程的SQL代码生成第二存储过程,包括:复制所述第一存储过程的SQL代码;将复制的第一存储过程的SQL代码中用于返回结果的第一SQL子代码调整为第二SQL子代码;对调整后的复制的第一存储过程的SQL代码进行编译,得到第二存储过程;其中,所述第一SQL子代码用于返回结果集,所述第二SQL子代码用于返回与所述结果集对应的SQL语句。结合第一方面的上述任意一种实现方式,在第一方面的第三种可能的实现方式中,生成所述第二存储过程的查询视图后,还包括:执行所述第二存储过程的查询视图中包含的select语句,得到所述第二存储过程的结果集。结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,得到所述第二存储过程的结果集后,还包括:根据所述第二存储过程的查询视图,对所述第二存储过程的结果集进行二次处理,所述二次处理包括以下任意一项或组合:对所述结果集中的各字段进行过滤;对所述结果集中的各字段进行排序;对所述结果集中的各字段进行汇总;将所述结果集与其他结果集进行关联;提取所述结果集中排在前N位的字段。第二方面,本发明提供了一种存储过程处理装置,该装置包括:获取单元,用于当从检测到的访问请求中识别出第一存储过程名时,根据所述第一存储过程名获取所述第一存储过程的SQL代码;第一生成单元,用于基于所述第一存储过程的SQL代码生成第二存储过程;执行单元,用于执行所述第二存储过程,得到所述第二存储过程的返回结果;所述第二存储过程的返回结果为与所述第一存储过程的返回结果对应的SQL语句;第二生成单元,用于基于所述第二存储过程返回的SQL语句生成所述第二存储过程的查询视图的SQL代码;第三生成单元,用于执行所述第二存储过程的查询视图的SQL代码,生成所述第二存储过程的查询视图。结合第二方面,在第二方面的第一种可能的实现方式中,所述获取单元具体用于:根据预定义的关键字,从检测到的访问请求中识别出第一存储过程名。结合第二方面,在第二方面的第二种可能的实现方式中,所述第一生成单元具体用于:复制所述第一存储过程的SQL代码;将复制的第一存储过程的SQL代码中用于返回结果的第一SQL子代码调整为第二SQL子代码;对调整后的复制的第一存储过程的SQL代码进行编译,得到第二存储过程;其中,所述第一SQL子代码用于返回结果集,所述第二SQL子代码用于返回与所述结果集对应的SQL语句。结合第二方面的上述任意一种实现方式,在第二方面的第三种可能的实现方式中,所述装置还包括:处理单元,用于执行所述第二存储过程的查询视图中包含的select语句,得到所述第二存储过程的结果集。结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,在得到所述第二存储过程的结果集后,所述处理单元还用于:根据所述第二存储过程的查询视图,对所述第二存储过程的结果集进行二次处理,所述二次处理包括以下任意一项或组合:对所述结果集中的各字段进行过滤;对所述结果集中的各字段进行排序;对所述结果集中的各字段进行汇总;将所述结果集与其他结果集进行关联;提取所述结果集中排在前N位的字段。本发明提供的方案,通过将返回结果集的存储过程编译成查询视图,实现对了结果集的二次处理,提高了存储过程使用的灵活性。附图说明图1为本发明实施例提供的一种存储过程处理方法的流程图;图2为本发明实施例提供的一种存储过程处理装置的结构图。具体实施方式本发明实施例提供了一种存储过程处理方法和装置,通过将返回结果集的存储过程编译成查询视图,实现对结果集的二次处理。下面结合说明书附图和各实施例对本发明技术方案进行说明。本发明实施例提供的一种存储过程处理方法和装置,可应用于具备处理器的各种计算机上,如通用个人计算机、便携式设备(如平板计算机)或智能手机等。所述存储过程处理装置通过有线或无线介质与数据库所在的服务器的标准接口相连,对外部程序(如报表平台)向数据库发起的访问请求进行监控和检测。参阅图1所示,本发明实施例中存储过程处理装置对存储过程进行视图化处理的流程如下:步骤101:当从检测到的访问请求中识别出第一存储过程名时,根据第一存储过程名获取第一存储过程的SQL代码。存储过程处理装置监控并检测进入数据库的所有访问请求,并且,可以根据预定义的关键字(KeyWord),从检测到的访问请求中识别出待处理的存储过程名。其中,关键字可以定义为XX或_XX的形式。例如,若定义有一关键字为_VIEW,当存储过程处理装置检测到报表平台向数据库发起的如下查询请求时:selecta.name,b.agefromtabletablea,_view{procedure(input)当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1