用于数据库查询的系统及方法

文档序号:6554142阅读:176来源:国知局
专利名称:用于数据库查询的系统及方法
技术领域
本发明涉及数据库查询,更具体地说,本发明涉及使用变量替换以及自动联合来按需减少数据库查询。
背景技术
结构化查询语言(SQL)对执行查询来说是一种非常严格的语言。这正是所期望的,因为对于数据库查询的好的结构化的格式是SQL语言的目的。其提供了通用的语言来执行数据库脚本,当前市场上地所有数据库应用均可以使用所述数据库脚本,并可以在所述数据库脚本中提供应用程序员接口(API)。然而,有时需要将来自任意数量的源数据库表单中的大量信息一起放到一个数据集中。SQL通过提供内部连接以及联合命令来处理该过程,从而可以在表单及不同数据集之间合并数据。然而,在这种情况下,需要在将不会输入数据的位置插入零,以及使用仅用来确定每个联合中得到了正确数据的重复代码。
在SQL中,查询可以根据一组规则及定义来配置。当前,程序员要处理巨大的代码复杂性。SQL要求语法成分非常精确。

发明内容
一种系统、程序产品以及方法,其用于通过接收具有全局变量的查询文档来通过随需减少数据库查询而进行数据库查询,所述全局变量选择性地被标识第一全局变量的第一标签标识为整个替换变量,并被标识第二全局变量的第二标签标识为整个删除串;以及通过以下方式从所述查询文档构建扩展查询,所述方式包括把由第一标签标识的任何变量替换为运行时串,在所述查询文档中标识任何联合,以及选择性地替换由第二标签所标识的任何变量和删除所述第二标签而不替换由所述第二标签标识的变量。
通过以下对本发明当前的优选实施例的详细描述并结合附图,本发明其它的特点和优点将变得明显。


图1例示了用于根据本发明优选实施例进行数据库查询的各种程序结构及组件。
图2例示了变量的语法。
图3是例示了用于查询数据库的本发明优选实施例的步骤的高标准流程图。
图4是例示了用于执行图3中选择性替换的步骤41的本发明优选实施例的步骤的流程图。
图5是高标准系统图,其例示了机器可读的程序存储装置,所述装置明确包含了可以由机器执行的指令程序用来执行查询数据库的方法步骤。
具体实施例方式
根据本发明的优选实施例,当需要把来自任意数量的源数据库表单的大量信息一起放入一个数据集时,替换变量以及UNION命令将在运行时被插入,以根据子查询生成上级查询。结果,这将把数百页的代码减少为只有一页纸那么少。
在编程中,变量替换已经被广泛应用,但是其仅仅被用于替换单独的变量。根据本发明的优选实施例,变量替换用于构建自身的查询。所述子查询是一种基于任意数量的规则或终端用户所驱动的过程的可以被添加、删除以及修改的命令解释程序。如果变量可以依其在运行时的状况而不同,则其可以被替换。这就被扩展为,如果查询在运行时可以不同,则替换该查询(包括把该查询括在中间的字符标签)。
在SQL中,可以根据一组规则及定义来配置查询(即,查询是可配置的),这将导致巨大的代码复杂性。在本发明中,通过断开代码段以及简化代码来处理这种复杂性。SQL要求语法成分非常精确。
参阅图1,其阐述了与本发明的优选实施例相关的选定结构以及单元。查询文档20馈送控制文档24以及文档表单28,如图线23和25所分别表示的。控制文档24包括执行进度表26并访问文档表单28中的包括查询18、全局变量17和联合定义19在内的信息。运行时代理22监控下述控制文档,其执行进度表26指示了将被执行的查询,随之,所述运行时代理22从控制文档24获取构建扩展查询12所需的那些定义、变量以及查询,并将其馈送至载入代理16。接下来,在数据库10上执行扩展查询12来生成输出集14。
参阅与表单1相关的图2,变量的语法包括标签42、46之间的variable_name 44。标签指示变量的类型。在表单1的示例中,标签%标识整个替换变量,而标签@标识整个删除串。
参阅图3,本发明的优选实施例的数据库查询按照如下进行。在步骤29中,程序员准备了查询文档20,诸如表单1中所例示的。该查询文档20是普通文档,其将在随后的步骤中被修改以生成如表单2和5中所例示的扩展查询12,下文将对此进行更详尽的描述。
在步骤31中,用户(可以是程序员或其他人)指定执行进度表26并在文档表单28中定义输出集14所需要的具体查询18。查询文档20指定全局变量17,而具体查询18和得到的联合定义19来自于本步骤31中的用户输入以及查询文档20。
在步骤33中,运行时代理22查询控制文档24来确定要运行哪些查询,并在步骤35中调用步骤35中所需的查询18、全局变量17以及联合定义19并将其提供给载入代理16,以构建扩展查询12。
在步骤43中,扩展查询12根据数据库10来执行,以构建输出集14,如表单2以及表单5(对于不同的查询)中所例示的。
步骤37-41是步骤35的扩展。在步骤37中,待构建至该查询中的联合被确定,而在步骤39中,整个替换变量被运行时串所替换。在本示例的语法中,这是一些由标签% 42、46所标识的串或变量44。
在步骤30中,UNION ALL被插入,以标识查询中的联合,从而可以根据具体选择标准来估算聚合函数。在步骤41中,整个的删除串44被选择性地替换,或者其标签@42、46被删除,以将变量串44恢复为普通语法。
参阅图4,步骤41被进一步细化。在步骤32中,检验下一变量,看其在每个接连的联合中是否改变。如果未改变,则在步骤34中该变量将不进行变量替换而留做固定代码。如果发生改变,则在步骤36中完成变量替换,例如,改变选择标准,比如日期子句。在步骤38中,检验该下一变量,看其是否可以改变位置。如果是,则在步骤40中,随同变量替换在上方或下方插入NULL或零值,以便数据可以按顺序进行移位。当联合完成后,所有数据归于一个数据集中。
根据控制文档24,运行时代理22和/或载入代理16提供了子例程系统,其被创建用于根据变量名来替换或删除变量17。这将在运行时在步骤39和41中被执行,并可以在存在或不存在终端用户交互的情况下完成(根据整个最终产品的要求而定)。
在使用了几个聚合函数的表单1的示例查询中,在%variable_name%中的变量是整个替换变量,其在运行时由代理用任意需要的串来替换。在@variable_name@中的变量指整个删除串,在运行时如果存在需要删除行的条件,则所述变量为将删除变量,否则,标签@(或符号)被删除从而该行被恢复为普通的SQL语法。
SQL被用于使用下列内容来创建查询
SELECT 标识抓取的字段
FROM 从中抓取字段的表单
WHERE用来确定将从字段中选择哪些数据
GROUP BY 输出排序次序
ORDER BY 输出显示中的列的次序
在SQL中,UNION是可以结合两个子选择结果的操作,且常用来合并从几个表单中得到的数值列表。占位符用在从SQL返回的结果的列中以使其求和不会在输出中被覆盖。例如,要把三个表单A、B、D中的数值合并到一个表单E中,需要两个联合。
第一个联合合并表单A和B,形成表单C。
第二个联合合并表单C和D,形成表单E。
表单1例示了一组使用了本发明优选实施例的变量替换策略的SQL代码。在该示例中,ACCOUNT_DESC是表单名,TA是分配变量,%variable_name%表示在该代码中随后将被替换的串,%INSERTZEROABOVE%是指运行时所确定数量的NULL值将被插入上方,%INSERTZEROBELOW%是指运行时所确定数量的NULL值将被插入下方。
表单1变量替换策略示例
1SELECTTA.ACCTGRP_ID, TA.ORIG_LOC_CD,
TA.SERVICE_TYP_CD,
2TA.ACCOUNT_ID,AG.ACCOUNT_DESC
3
4//在SUM行上方及下方插入
5运行时所确定数量的NULL值。
6
7%INSERTZEROABOVE%
8,SUM(TA.USAGE_QTY)
9,SUM(TA.TOT_CHRG_AMT)
10%INSERTZEROBELOW%
11
12//SCHEMA标识符的自动替换;
13随后将%YEARCLAUSE%和%MONTHCLAUSE%
14用于操作日期搜索。
15
16FROM %SCHEMA%.%TABLE% TA,%SCHEMA%.ACCOUNTAG
17WHERE TA.ACCOUNT_ID=AG.ACCOUNT_ID
18AND TA.CONTROL_GROUP_CD=AG.CONTROL_GROUP_CD
19AND TA.SERVICE_CD=‘LBR’
20AND%YEARCLAUSE%%MONTHCLAUSE%
21
22GROUP BY T.ACCTGRP_ID
23,TA.ORIG_LOC_CD
24,TA.SERVICE_TYP_CD
25,TA.ACCOUNT_ID
26,AC.ACCOUNT_DESC
27
28//有时需要替换ORDER BY命令,
29有时则不需要。
30在行26处的ORDER BY命令中的1,2,3,4引用回
31本表单中行1处的SELECT子句中的
325个变量中的前4个。
33
34@ORDER BY 1,2,3,4@
表单1的代码由运行时代理来操作,且变量被动态地插入到代码中以构建大范围的、语法完整的查询。
表单2例示了所需的结果集,行3和4表示第一个结果,行5和6行表示第二个结果,以及行7和8表示第3个结果。占位符0,0将被用来(参阅表单3)将第一个结果后面的每个结果从其先前结果向下移动两行。
表单2结果集
1
2TA.ACCTGRP_ID,TA.ORIG_LOC_CD,TA.SERVICE_TYP_CD,
3TA.ACCOUNT_ID,AG.ACCOUNT_DESC
4,FullYearUSAGE_QTY
5,FullYearTOT_CHRG_AMT
6,YearToDateUSAGE_QTY
7,YearToDateTOT_CHRG_AMT
8,CurrentMonthUSAGE_QTY
9,CurrentMonthTOT_CHRG_AMT
表单3例示了根据本发明的过程对表单1的代码的扩展。在本发明之前,程序员将必须写出并管理表单3的该代码。通过本发明,程序员能够通过参考表单1而不必亲自构建表单3中的扩展版本就可以使其所欲完成的任务形象化——现在这是通过运行时代理来完成的。
表单3的代码根据表单2的结果集呈现三个联合的实例。表单3的行2-16表示对表单1的行1-21的扩展,以生成结果集(表单2)输出行3和4,并忽略表单1的行26的ORDER BY,以及进行下述变量替换
%INSERTZEROABOVE% 用null替换
%INSERTZEROBELOW% 用,0,0,0,0替换
%SCHEMA% 用DBADMIN替换
%TABLE%用TABLE1替换
%YEARCLAUSE% 用TA.YEAR=2003替换
%MONTHCLAUSE% 用null替换
表单3的行18-33根据行25-28的WHERE子句对不同的数据求和,以生成至今为止的对于年的结果集的行5和6,并进行下述变量替换
%INSERTZEROABOVE% 用,0,0替换
%INSERTZEROBELOW% 用,0,0替换
%SCHEMA% 用DBADMIN替换
%TABLE%用TABLE1替换
%YEARCLAUSE% 用TA.YEAR=2003替换
%MONTHCLAUSE% 用TA.MONTH<=7替换
表单3的行35-50根据行41-44的WHERE子句对仍然不同的数据求和,以生成对于当前月的结果集的行7和8,并进行下述变量替换
%INSERTZEROABOVE% 用,0,0,0,0替换
%INSERTZEROBELOW% 用null替换
%SCHEMA% 用DBADMIN替换
%TABLE%用TABLE1替换
%YEARCLAUSE% 用TA.YEAR=2003替换
%MONTHCLAUSE% 用TA.MONTH=7替换
在本示例中所需的步骤40的三次执行期间,将表单1的行8的%INSERTZEROBELOW%扩展为本表单3的行6的0,0,0,0指明了底部的四个位置并没有被使用,且代表了占位符;将表单1的行5和8的%INSERTZEROABOVE%和%INSERTZEROBELOW%分别扩展为表单3的行20和23的0,0指明了顶部的两个位置和底部的两个位置没有被使用;以及将表单1的行5的%INSERTZEROABOVE%扩展为本表单3的行37的0,0,0,0指明了顶部的四个位置并没有被使用。
表单3表单1的运行时扩展(所替换变量)
1//下面的代码为具有三个联合的示例。
2
3SELECTT.ACCTGROP_ID,TA.ORIG_LOC_CD,
TA.SERVICE_TYP_CD,
4TA.ACCOUNT_ID,AG.ACCOUNT_DESC
5
6,SUM(TA.USAGE_QTY)
7,SUM(TA.TOT_CHRG_AMT)
8,0,0,0,0
9
10FROM DBADMIN.TABLE1 TA,DBADMIN.ACCOUNT AG
11
12WHERE TA.ACCOUNT_ID=AG.ACCOUNT_ID
13AND TA.CONTROL_GROUP_CD=AG.CONTROL_GROUP_CD
14AND TA.SERVICE_CD=‘LBR’
15AND TA.YEAR=2003
16
17GROUP BY TA.ACCTGRP_ID
18,TA.ORIG_LOC_CD
19,TA.SERVICE_TYP_CD
20,TA.ACCOUNT_ID
21,AG.ACCOUNT_DESC
22
23UNION ALL
24
25SELECTTA.ACCTGRP_ID,TA.ORIG_LOC_CD,
TA.S ERVICE_TYP_CD,
26TA.ACCOUNT_ID,AG.ACCOUNT_DESC
27,0,0
28,SUM(TA.USAGE_QTY)
29,SUM(TA.TOT_CHRG_AMT)
30,0,0
31
32FROM DBADMIN.TABLE1 TA,DBADMIN.ACCOUNT AG
33
34WHERE TA.ACCOUNT_ID=AG.ACCOUNT_ID
35AND TA.CONTROL_GROUP CD=AG.CONTROL GROUP_CD
36AND TA.SERVICE_CD=‘LBR’
37AND TA.YEAR=2003 AND TA.MONTH<=7
38
39GROUP BY TA.ACCTGRP_ID
40,TA.ORIG_LOC_CD
41,TA.SERVICE_TYP_CD
42,TA.ACCOUNT_ID
43,AG.ACCOUNT_DESC
44
45UNION ALL
46
47SELECTTA.ACCTGRP_ID,TA.ORIG_LOC_CD,
TA.SERVICE_TYP_CD,
48TA.ACCOUNT_ID,AG.ACCOUNT_DESC
49,0,0,0,0
50,SUM(TA.USAGE_QTY)
51,SUM(TA.TOT_CHRG_AMT)
52
53FROM DBADMIN.TABLE1TA,DBADMIN.ACCOUNT AG
54
55WHERE TA.ACCOUNT_ID=AG.ACCOUNT_ID
56AND TA.CONTROL_GROUP_CD=AG.CONTROL_GROUP_CD
57AND TA.SERVICE_CD=‘LBR’
58AND TA.YEAR=2003AND TA.MONTH=7
59
60GROUP BY TA.ACCTGRP_ID
61,TA.ORIG_LOC_CD
62,TA.SERVICE_TYP_CD
63,TA.ACCOUNT_ID
64,AG.ACCOUNT_DESC
65
66ORDER BY 1,2,3,4
运行时代理22请求查询,如下列决策树所例示的
1.代理22每晚激活并搜索当晚将被运行的控制文档24。
2.如果其发现将要运行的文档24,其将通过文档24执行一般载入代理16,否则其简单地结束。
3.在载入之时,控制文档24把必要信息馈送给运行时代理22,该信息包括将执行哪些查询18。
从而,代理22驱动着整个过程。其执行所安排的和正在进行的任务,这样,其(通过其本身或通过载入代理16)构建正在执行的查询12。从而,代理22处理表单1(查询文档20)->表单3(扩展查询12)->表单2(输出集14)的查询。表单4是本过程的简单的伪码示例。
表单4运行时代理实例
‘----运行时代理Set control_docs=SearchForScheduledQueriesIf control_docs.Count<>0ThenForall n In Control_docsCall ProcessQueryExecution(n)End ForallEnd If‘----结束运行时代理‘----ProcessQueryExecution例程Set query=SubPercentVariables(control_doc.Query(0))Forall s In control_doc.NumberOfUnions(0)Set query=AddUnion(query)<!-- SIPO <DP n="11"> --><dp n="d11"/>If s=LastUnion ThenSet query=SubAtVariables(query)ElseSet query=RemoveAtVariables(query)End IfEnd Forall‘----结束ProcessQueryExecution例程
根据本发明的优选实施例,代理22用于将程序员用表单1的格式所写的查询20扩展成为表单3的格式。类似地,可提供减少代理(未示出),用于通过使用类似过程将表单3格式的查询12减少为表单1格式的查询20。
在表单1-3的示例中提供了两个联合。然而这是任意的。在运行时,可能只需要一个联合或甚至一个也不需要。这是由控制(aka映射)文档24来决定的。
表单2是所需结果14的伪码的代表。还存在一般的子例程用于构建表单3中的查询,其使用在运行时由代理22所收集的信息来一般地将查询接合到一起。例如,存在控制文档24用于预定代理执行的时间,在某些进度表中,或按照需要,数据库工具(代理22)寻找已准备好执行的这些控制文档24中的一个。控制文档24服务于多个目的。一个目的是提供在数据库源10上的信息。在该文档24中,存在用于源数据库模式的字段,并且在该示例中该字段的值被管理者(不一定是程序员)设定为DBADMIN。该相同的控制文档24具有关于查询18需要为一次成功运行而进行扩展并执行的信息。然后所述控制文档24抓取这些查询(其是表单2类型的文档)并开始将数值插入(步骤39、41)到所述控制文档24中,直至它们变完整(表单3为示例),然后它们被执行。
在通过代理22将表单1处理为表单3的过程中,用多种方式完成变量替换。表单2是在过程结束后在所有的位置中将接收什么数据的代表。这必须在运行时获知,以进行对表单3的最后查询。实际的替换变量17来自于在工具内的映射,以及运行时的值,例如,正执行查询的类型以及代理正在运行时的日期/时间。
位置通常指输出集14的一部分。输出数据是一组行,其对于表单中的每一列具有多个数据条目。因此,位置指一组输出数据中的单个列(表单5)。例如,对于以下数据,Num1指输出位置。
表单5输出集实例
姓名 序列Num1 Num2
Matt ###### 1520
Peter&&&&&& 2010
相对于现有技术的优点
本发明的优点在于,提供了一种改进的系统和方法,其使用变量替换和自动联合用于随需减少数据库查询。
备选实施例
将要理解,虽然出于例示的目的而在此处描述了本发明的具体实施例,但仍可以不脱离本发明精神和范围而做出各种修改。参阅图5,具体地,在本发明的范围内提供了一种计算机程序产品或程序单元,或一种程序存储或存储器装置50,例如固体或流体传输媒体、磁线或光缆、磁带或磁盘或其他类似媒体,用于存储如行51所例示的机器可读的信号,所述信号用于根据本发明的方法和/或根据与本发明的系统相一致的结构及其组件来控制计算机52的操作。
进一步地,本方法的每一个步骤都可以在任何通用计算机上执行,所述通用计算机例如命名为zSeries、iSeries、xSeries和pSeries的IBM系统或其它类似系统,并且本方法的每一步骤均按照由任何编程语言(如C++、Java、Pl/l、Fortran或其它类似语言)所生成的一个或多个程序元素、模块或对象或者一个或多个程序元素、模块或对象的一部分。且更进一步地,每个所述步骤、或实现每个所述步骤的文件或对象或其它类似物可以由专用硬件或为该用途设计的电路模块来执行。
因此,本发明的保护范围仅由下述权利要求及其等同物来限制。
权利要求
1.一种通过随需减少数据库查询来查询数据库的方法,包括
接收具有全局变量的查询文档,所述全局变量选择性地被标识第一全局变量的第一标签标识为整个替换变量,以及被标识第二全局变量的第二标签标识为整个删除串;以及
通过以下方式从所述查询文档构建扩展查询,所述方式包括把由所述第一标签标识的任何变量替换为运行时串,在所述查询文档中标识任何联合,以及选择性地替换由所述第二标签所标识的任何变量和删除所述第二标签而不替换由所述第二标签所标识的变量。
2.权利要求1的方法,所述选择性地替换的步骤进一步包括
确定在每个接连的联合中下一给定变量是否改变,并且如果是,则删除所述第二标签以保留该下一给定变量而不进行替换;以及如果否,则基于改变选择标准来替换所述下一给定变量。
3.权利要求2的方法,所述选择性地替换的步骤进一步包括
确定所述下一给定变量是否能够在输出集之中改变位置,并且如果是,则随同变量替换在上方或下方选择性地插入空值以使输出数据按顺序进行移位。
4.权利要求1的方法,进一步包括
从所述查询文档以及用户输入中构建指定了执行进度表、查询、全局变量以及联合定义的控制文档。
5.权利要求4的方法,进一步包括
执行运行时代理来监控所述控制文档中将运行的查询,以及在识别出这样的查询时构建并执行所述扩展查询。
6.一种通过随需减少数据库查询来查询数据库的系统,包括
具有全局变量的查询文档,所述全局变量选择性地被标识第一全局变量的第一标签标识为整个替换变量,以及被标识第二全局变量的第二标签标识为整个删除串;以及
代理,用于通过以下方式从所述查询文档构建扩展查询,所述方式包括把由所述第一标签所标识的任何变量替换为运行时串,在所述查询文档中标识任何联合,以及选择性地替换由所述第二标签所标识的任何变量和删除所述第二标签而不替换被所述第二标签所标识的变量。
7.权利要求6的系统,进一步包括
所述代理进一步用于确定在每个接连的联合中下一给定变量是否改变,并且如果是,则删除所述第二标签以保留该下一给定变量而不进行替换;以及如果否,则基于改变选择规则来替换所述下一给定变量。
8.权利要求7的系统,进一步包括
所述代理进一步用于确定所述下一给定变量是否能够在输出集之中改变位置,并且如果是,则随同变量替换在上方或下方选择性地插入空值以使输出数据按顺序进行移位。
9.权利要求6的系统,进一步包括
代理,用于从所述查询文档以及用户输入中构建指定了执行进度表、查询、全局变量以及联合定义的控制文档。
10.权利要求9的系统,进一步包括
运行时代理,用于监控所述控制文档中将运行的查询,以及在识别出这样的查询时用于构建并执行所述扩展查询。
11.一种具有用来实现权利要求1-5的方法的指令的计算机程序产品。
全文摘要
通过随需减少数据库查询来查询数据库。查询文档包括全局变量,所述全局变量选择性地被标识第一全局变量的第一标签标识为整个替换变量,以及被标识第二全局变量的第二标签标识为整个删除串。提供代理用于通过以下方式从所述查询文档构建扩展查询,所述方式包括把由第一标签所标识的任何变量替换为运行时串,在所述查询文档中标识任何联合,以及选择性地替换由第二标签所标识的任何变量和删除第二标签而不替换由第二标签所标识的变量。
文档编号G06F17/30GK1804842SQ20061000123
公开日2006年7月19日 申请日期2006年1月10日 优先权日2005年1月11日
发明者M·J·班格, A·M·章, J·A·小马丁, D·G·默里 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1