一种将Script语言转换成SQL语言的方法及装置的制作方法

文档序号:6611846阅读:215来源:国知局

专利名称::一种将Script语言转换成SQL语言的方法及装置的制作方法
技术领域
:本发明涉及程序语言转换处理领域,特别涉及一种需要将反映在数据库中的Script语言转换成SQL语言的方法及装置。
背景技术
:Script语言是一种脚本程序语言的统称,包括JavaScript、VBScript、AppletScript、Script等,其主要用于描述业务规则,定义元素之间的相互关系。SQL(StructuredQueryLanguage,结构化查询语言)是一种翁:据库查询和程序设计语言,用于存取资料以及查询、更新和管理关联式数据库系统,SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。不需要用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操纵对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语言可以嵌套,在多数情况下,在其它语言中需要一大段程序实现的一个单独事件只需要一个SQL语句就可以达到目的。在实际中,相关技术人员在软件实现时,通常会遇到需要将Script语言描述的业务规则反映到数据库中的情况,例如,在财务软件中,对于工资计算功能通常需要采用公式定义,以体现各个工资项目之间存在的依赖关系和数量关系,如实发工资=基本工资-保险+补贴,在这种情况下,现有技术的解决方案为,在Script语言的环境下,提供相应的变量,通过计算控件完成计算。其中,计算控件采用内置的脚本执行器进行计算,然后返回计算结果。然而,这种方法只能在客户端进行低效地计算,一次执行只得到一个单元格的值,不能支持批量处理;并且,由于Script语言的局限性,这种方法只能处理简单的业务逻辑,不支持复杂业务逻辑的处理。因此,本领域技术人员迫切需要发展出一种对于需要反映到数据库中的Script语言,可以将其转换成SQL语言以获得较强业务处理能力的方法及装置。
发明内容本发明所要解决的技术问题是提供一种将Script语言转换成SQL语言的方法,用以将需要反映到数据库中的Script语言转换成SQL语言,以获得SQL的业务处理能力,从而实现复杂业务逻辑地处理,以及批量处理功6匕目匕。本发明还提供了一种将Script语言转换成SQL语言的装置,用以保证上述方法在实际中的实现及应用。为解决上述技术问题,本发明实施例公开了一种将Script语言转换成SQL语言的方法,包括获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;解析所述业务规则,获得语法元素及相应的数据处理逻辑;根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。优选的是,所述的方法,还包括根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;按照所述顺序逻辑执行所述SQL语句。优选的是,通过以下步骤确定所述顺序逻辑根据所述数据处理逻辑创建森林;对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。优选的是,所述解析步骤包括根据所述业务规则建立Script语法树;遍历所述语法树,提取其中的语法元素及数据处理逻辑。优选的是,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。优选的是,所述转换成SQL语句的步骤包括将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。本发明实施例还公开了一种将Script语言转换成SQL语言的装置,包括获取单元,用于获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;配置单元,用于生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;解析单元,用于解析所述业务规则,获得语法元素及相应的数据处理逻辑;转换单元,用于根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。优选的是,所述的装置,还包括确定单元,用于根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;执行单元,用于按照所述顺序逻辑执行所述SQL语句。优选的是,所述确定单元包括森林创建子单元,用于根据所迷数据处理逻辑创建森林;生成子单元,用于对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。优选的是,所述解析单元包括语法树建立子单元,用于根据所述业务规则建立Script语法树;提取子单元,用于遍历所述语法树,提取其中的语法元素及数据处理逻辑。优选的是,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。优选的是,所述转换单元包括格式化子单元,用于将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。与现有技术相比,本发明实施例具有以下优点本发明通过解析对于需要反映到数据库中的Script语言定义的业务规则,解析出语法元素及数据处理逻辑,通过处理条件关系,完成从Script语言到SQL语句的转换,从而使系统可以在具体的数据库中执行SQL语句,以实现复杂业务逻辑地处理,以及批量处理功能,获得较强业务处理能力。图1是本发明的一种将Script语言转换成SQL语言的方法实施例1的流程图;图2是现有技术中一种Kscript语言的类体系示意图;图3是现有技术中一种KSQL语言的类体系示意图;图4是本发明的一种将Script语言转换成SQL语言的方法实施例2的流程图;图5是一种将Script语言转换成SQL语言的装置实施例的结构框图;图6是应用图5所示的装置将需要反映到数据库中的Script语言转换到SQL语言的流程图。具体实施方式为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。本发明实施例的核心构思之一在于,通过解析对于需要反映到数据库中的Script语言定义的业务规则,解析出语法元素及数据处理逻辑,通过处理条件关系,完成从Script语言到SQL语句的转换,使系统可以在具体的数据库中执行SQL语句,以实现复杂业务逻辑地处理,以及批量处理功能,获得较强业务处理能力。参照图1,示出了本发明的一种将Script语言转换成SQL语言的方法实施例1的流程图,具体包括以下步骤步骤IOI、获取Script语言定义的业务规则,所述业务规则为语法元,素组成的数据处理逻辑;步骤102、生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;步骤103、解析所述业务规则,获得语法元素及相应的数据处理逻辑;步骤104、根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。公知的是,Script(脚本)是使用一种特定的描述性语言,依据一定的格式编写的可执行文件。脚本通常可以由应用程序临时调用并执行。在本实施例中,所述Script语言定义的业务规则是指需要反映到数据库中的Script语言所定义的语法元素组成的数据处理逻辑,例如,公式计算规则、数值计算规则等,其中,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字等。此外,一个业务规则包含一组条件和在此条件下执行的操作,它们表示业务规则应用程序的一段业务逻辑。业务规则通常由相关人员开发、修改或定制,业务规则的理论基础是设置一个或多个条件,当满足这些条件时会触发一个或多个操作。SQL则是专为数据库而建立的操作命令集,是一种数据库语言。在使用SQL时,只需要发出"做什么,,的命令,而不需要考虑"怎么做"。SQL语言的组成有如下特性(1)一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义;(2)—个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项;(3)—个表或者是一个基本表或者是一个视图;其中,基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义。(4)一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应。(5)用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格)。(6)SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN、COBOL、PASCAL、PL/I、C和Ada语言等。再者,SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。在实际中,SQL包括了对数据库的操作,主要由4个部分组成第一、数据定义(SQLDDL):用于定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引四个部分。第二、数据操纵(SQLDML).包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。第三、数据控制对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。第四、嵌入式SQL语言的使用规定规定SQL语句在宿主语言的程序中使用的规则。总的来说,SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作记录集。所有SQL语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。SQL不要求用户指定对数据的存放方法。这种特性使用户更易集中精力于要得到的结果。所有SQL语句使用查询优化器,由它决定对指定数据存取的最快速度的手段。此外,SQL可用于所有用户的数据库活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。SQL为许多任务提供了命令,包括查询数据;在表中插入、修改和删除记录;建立、修改和删除数据对象;控制对数据和数据对象的存取;保证数据库一致性和完整性等,SQL将全部任务统一在一种语言中,是所有关系数据库的公共语言,并且,所有用SQL编写的程序都是可以移植的。显然,由于Script语言与SQL语言处理的对象不同、完成的目的不同,两者在语法、运行机制等方面存在诸多差异。在本实施例中,为实现从Script语言到SQL语言的简单转换,可以考虑把一个方案中的所有项目都放到数据库中的一张表中,在这种情况下,每个项目的公式则可以转换成相应的SQL语言的update语句。现有技术中,对于Script语言和SQL语言的描述和定义存在两套类体系,并且,所述Script语言和SQL语言类体系的构成具有相似性,它们所有的脚本都是由单独的语句(Statement)组成,然而,这些语句分别属于不同的类型,例如,Script语言的常见语句类型包括if语句、表达式语句、for语句等;SQL语言的常见语句类型包括select语句、update语句等。其中,一个语句可以包括一个或多个表达式。在表达式层次上,Script语言和SQL语言分别具有继承于CodeExpr和Sq正xpr的两套类体系,例如,参考图2,示出了现有技术中一种Kscript语言的类体系示意图,参考图3,示出了现有技术中一种KSQL语言的类体系示意图。具体而言,在Script语言中,表达式通常可以分为二元表达式、函数表达式、字符串表达式、浮点表达式、整数表达式、标记符表达式等;在SQL语言中,表达式通常可以分为between表达式、in表达式、Null表达式等,公知的是,上述表达式的关系采用合成(Composite)模式,这种模式采用树形结构来实现普遍存在的对象容器,从而将"一对多,,的关系转化为"一对一"的关系,使得客户代码可以一致地处理对象和对象容器,而无需关心处理的是单个对象,还是组合的对象容器。实际上,将"客户代码与复杂的对象容器结构"解耦是这种合成模式的核心思想,解耦之后,客户代码将与纯粹的对象接口(而非对象容器的复杂内部实现结构)发生依赖关系,从而更能应对变化。例如,二元表示式通常由各种各样的表达式按二叉树结构组成。基于上述关系,在本实施例中,本领域技术人员需要根据具体情况任意设置配置表,用以定义Script语言中的语法元素所对应的表名、字段、关系等配置关系,例如,获得Scrip语言定义的业务规则可以采用如以下代码所示的流程<formula>formulaseeoriginaldocumentpage10</formula>生成所述语法元素的配置表为元素表字段关系Atable1FlBtable1F2Ctable2Fltablel.FA=table2.FA在本实施例中,优选的是,所述解析步骤103还可以包括以下子步骤子步骤Al、根据所述业务规则建立Script语法树;子步骤A2、遍历所述语法树,提取其中的语法元素及数据处理逻辑。由于所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。在这种情况下,可以通过以下子步骤将所述业务规则转换成SQL语句将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。其中,所述语法元素中的表达式通常为属性表达式。更为优选的是,为保证表达式的转换后的可识别性,所述转换成SQL语句的步骤还可以进一步包括以下子步骤将所述表达式中的数值和字符转换成SQL形式的数值和字符。为使本领域技术人员更好地理解本发明,以下辅以代码通过具体实例详细地说明本实施例的转换过程第一步,从公式定义器中获得符合Script语法的Script语言脚本;第二步,获得所述脚本的业务逻辑;例如,可以采用如以下代码所示的流程实现/氺*公式的业务规则privatevoidscriptBizRuleCheck(ListstmtList)throwsEASBizExceptionliif(stmtList.size()!=1)thrownewCompenItemFormuleException(CompenltemFormuleException.BIZ—MORESTMT—EXEC);CodeStmtstmt=(CodeStmt)stmtList.get(O);if(stmtinstanceofIfStmt11stmtinstanceofExprStmt)elsethrownewCompenItemFormuleException(CompenItemFormuleException.BIZ一NOTSUPPORTSTMT一EXEC);if(stmtinstanceofIfStmt)IfStmtifStmt=(IfStmt)stmt;if(ifNestCheck((IfStmt)stmt))thrownewCompenItemFormuleException(CompenltemFormuleException.BIZ—NEST—EXEC);〃所有的语句块只可有一个语句if(ifStmt.trueStmtList.size()>1)thrownewCompenltemFormuleException(CompenltemFormuleException.BIZ—MOREEXPR—EXEC);for(inti=0,size=ifStmt.elselfList.size();i<size;i++)if(((ElseIfItem)ifStmt.elseIfList.get(i)).stmtList.size()>1)thrownewCompenItemFormuleException(CompenltemFormuleException.BIZ—MOREEXPR—EXEC);if(ifStmt.elseStmtList.size()>1)thrownewCompenItemFormuleException(CompenltemFormuleException.BIZ—MOREEXPR—EXEC);第三步,根据所述脚本的类型分别遍历语句中的所有表达式,根据不同类型的表达式进行相应处理。例如,对于二元表达式,生成字符串后马上构造出对应的SQL二元表达式;对于字符串表达式,则进一步分析是否为枚举类型的项目。可以通过以下代码实现〃格式化公式,把属性表达式转换成标记表达式;把函数转换成SQL函数privateCodeExprformatExpr(CodeExprexpr)throwsCompenltemFormuleExceptionif(exprinstanceofPropertyExpr)expr=proptExprCheck((PropertyExpr)expr);returnexpr;if(exprinstanceofStringExpr)expr=constantCheck((StringExpr)expr);returnexpr;if(exprinstanceofBoolExpr)if(((BoolExpr)expr).val)returnnewIntExpr(l);elsereturnnewIntExpr(O);if(exprinstanceofMethodlnvokeExpr)〃只能处理SQL支持的函数expr=methodCheck((MethodInvokeExpr)expr);StringmethodName=((MethodInvokeExpr)expr).methodName;if(SQLMETHODLIST.indexOf(methodName)<0)thrownewCompenItemFonnuleExceptiori(CompenltemFormuleException.MODTH—NOT—SUPPORT);if(exprinstanceofBinaryOpExpr)((BinaryOpExpr)expr).left=formatExpr(((BinaryOpExpr)expr).left);((BinaryOpExpr)expr).right=formatExpr(((BinaryOpExpr)expr).right);returnexpr',returnexpr;第四步、对Script表达式中的特殊地方进行处理。例如,大于10000000的浮点数在Script语言中是采用科学计数法表示的,而在SQL语言中是不被接受的;或者,字符串在Script语言中用双引号表示,而在SQL语言中是用单引号表示的等等。privateStringformatNumberAndComma(StringScript)Patternp=Pattern.compile("[\\d][.](\\d)*E(\\d)*");Matcherm=p.matcher(Script);Stringtemp="";StringBufferrst=newStringBuffer();intstart=0,end=0,tag=0;BigDecimalbig=null;while(m.find())start=m.start();end=m.end();temp=Script.substring(start,end);big=newBigDecimal(temp);rst.append(Script.substring(tag,start));rst.append(big.toString());tag=end;rst.append(Script.substring(end));〃把双引号换成单引号returnrst.toString().replaceAll("V"',""');参照图4,示出了本发明的一种将Script语言转换成SQL语言的方法实施例2的流程图,具体包括以下步骤步骤401、获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;步骤402、生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;步骤403、解析所述业务规则,获得语法元素及相应的数据处理逻辑;步骤404、根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句;步骤405、根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;步骤406、按照所述顺序逻辑执行所述SQL语句。优选的是,在本实施例中,可以通过以下子步骤确定所述顺序逻辑子步骤B1、根据所述数据处理逻辑创建森林;子步骤B2、对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。假设项目之间的依赖关系为A=B+50,可以看出.,在这个关系中,项目A是依赖项目B的,则它们的顺序逻辑应当为先计算完B项目后,再计算A项目;或者,假设项目之间的依赖关系为A=B+50-C;B=C+100;在这种关系中,项目A、B同时依赖项目C,并且项目A依赖项目B,则它们的顺序逻辑应当为C、B、A。可以理解,如果在一个方案中存在4艮多项目,则可能存在多重依赖关系。为解决这个问题,应用本实施例进行排序的一种优选过程可以为一、分析项目公式,根据它们的依赖关系建立起这一片森林;二、按照广度优先的算法进行遍历,按照多个可达路径取其最远路径的原则,建立起顺序表。由于这是一个极为通用的算法,所以可以完全抽象出来,使这片森林的数据结构和遍历使用一个类——DependForest实现,树林中的节点用类Node表示。例如,可以采用以下代码所示的流程实现<formula>formulaseeoriginaldocumentpage17</formula>*查找图中的某个节点,返回一个值对(Key-Value),key是找到的节点,Value是该节点所处的位置;如果没有找到则返回-1,表示找不到privateintfindNode(StringnodeName)〃省略非关键代码privateintfindeNodeFromTree(Noderoot,StringtargetNodeName,intlevel)〃省略非关键代码/承*移动节点,节点只能从浅处往深处移动,即只能往高处移动,越高表示越早被别的项目依赖。氺/privatevoidmoveNode(Nodenode,Nodeparent)〃省略非关键代码〃构建森林publicvoidbuild(Listcompensltems)for(inti=0,size=compensltems.size();i<size;i++)addNode((DependNode)compensltems.get(i));}privatevoidaddNode(DependNodeitem)NodenewNode=null;if(!this.allItem.containsKey(item.getName()))newNode=newNode(item.getName());this.allRoot.put(newNode.getName(),newNode);this.allItem.put(newNode.getName(),newNode);elsenewNode=(Node)this.allItem.get(item.getName());〃找到item所处的位置intnewNodeLeve=fmdNode(item.getName());intchildLevel;Listchildren=item.getDependItem();for(inti=0,size=children.size();i<size;i++)StringchildName=((DependNode)children.get(i)).getName();childLevel=findNode(childName);if(childLevel==-1)〃插入到insNode下NodenewNodeChild=newNode(childNamenewNode);this.allItem.put(newNodeChild.getName()newNodeChild);newNode.getChildren().add(newNodeChild);elseif(childLevel<newNodeLeve+1)moveNode((Node)this.allltem.get(childName)newNode);〃遍历,得到最终结果publicListtravelForest()Listrst=newArrayList();Iteratoritl=this.allRoot.keySet().iterator();while(itl.hasNext())travelTree((Node)this.allRoot.get(itl.next()),0,rst);returnrst;privatevoidtravelTree(Noderoot,intlevel,ListallNodeLevel)MapnodeLevel=newHashMap();nodeLevel.put(root.getName(),newInteger(level));allNodeLevel.add(nodeLevel);if(root.getChildren().size()>0)level++;for(inti=0,size=root.getChildren().size();i<size;i++)travelTree((Node)root.getChildren().get(i),level,a脂odeLevel);level—;ClassNode〃树中的节点,内部类,省略非关键代码为使本领域技术人员更好地理解本发明,以下通过一种应用本实施例将Script语言转换成SQL语言的具体实例进行说明步骤Sl、获得Scrip语言定义的业务规则可以采用以下代码所示的流程实现If(C==100){A=B+CC=B+10;步骤S2、生成所述语法元素的配置表为:<table>tableseeoriginaldocumentpage22</column></row><table>步骤S3、解析所述业务规则,转换成具体的SQL语言,如下所示:Updatetable1settablel.Fl=(selecttablel.F2+table2.Flfromtable2Wheretable1.FA=table2.FAAndtable2.Fl=100)whereexist(selecttablel.Flfromtable1,table2wheretablel.FA=table2.FAandtable2.Fl=100);Updatetable2settable2.Fl=(selecttable2.F2+10fromtable2wheretablel.FA=table2.FA)Whereexist(selecttable2.Flfromtablel,table2wheretablel.FA=table2,FA);步骤S4、确定上述SQL语句的顺序逻辑由于A对C有依赖关系,所以先执行第二句SQL语句。显然,本发明通过将需要反映到数据库中的Script语言定义的业务规则转换成SQL语句,使系统可以在具体的数据库中执行SQL语句,以实现复杂业务逻辑地处理,以及批量处理功能,获得较强业务处理能力。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述即可。参考图5,示出了一种将Script语言转换成SQL语言的装置实施例的结构框图,包括以下单元获取单元501,用于获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;配置单元502,用于生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;解析单元503,用于解析所述业务规则,获得语法元素及相应的数据处理逻辑;转换单元504,用于根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。在本实施例中,优选的是,所述的装置还可以包括以下子单元确定单元,用于根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;执行单元,用于按照所述顺序逻辑执行所述SQL语句。在本实施例中,优选的是,所述确定单元还可以包括以下子单元森林创建子单元,用于根据所述数据处理逻辑创建森林;生成子单元,用于对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。在本实施例中,优选的是,所述解析单元还可以包括以下子单元语法树建立子单元,用于根据所述业务规则建立Script语法树;提取子单元,用于遍历所述语法树,提取其中的语法元素及数据处理逻辑。在本实施例中,优选的是,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。在本实施例中,优选的是,所述转换单元包括以下子单元格式化子单元,用于将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。参考图6,示出了应用图5所示的装置将需要反映到数据库中的Script语言转换到SQL语言的流程图,具体包括以下步骤步骤601、获取单元获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;步骤602、配置单元生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;步骤603、解析单元解析所述业务规则,获得语法元素及相应的数据处理逻辑;具体而言,该步骤可以通过以下子步骤实现子步骤C1、语法树建立子单元根据所述业务规则建立Script语法树;子步骤C2、提取子单元遍历所述语法树,提取其中的语法元素及数据处理逻辑。步骤604、转换单元根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句;具体而言,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字等,所述转换可以通过以下子步骤实现达式,将所述语法元素中的函数转换成SQL函数。步骤605、确定单元根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;具体而言,该步骤可以通过以下子步骤实现子步骤Dl、森林创建子单元根据所述数据处理逻辑创建森林;子步骤D2、生成子单元对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。步骤606、执行单元按照所述顺序逻辑才丸行所述SQL语句。对于装置实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。本发明可以用于众多通用或专用的计算系统环境或配置中。例如个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。此外,本发明还可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计储介质中。以上对本发明所提供的一种将Script语言转换成SQL语言的方法及一种类将Script语言转换成SQL语言的装置进行了详细介绍,本文中应明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。权利要求1、一种将Script语言转换成SQL语言的方法,其特征在于,包括获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;解析所述业务规则,获得语法元素及相应的数据处理逻辑;根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。2、如权利要求l所述的方法,其特征在于,还包括根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;按照所述顺序逻辑执行所述SQL语句。3、如权利要求2所述的方法,其特征在于,通过以下步骤确定所述顺序逻辑根据所述数据处理逻辑创建森林;对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。4、如权利要求1、2或3所述的方法,其特征在于,所述解析步骤包括根据所述业务规则建立Script语法树;遍历所述语法树,提取其中的语法元素及数据处理逻辑。5、如权利要求4所述的方法,其特征在于,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。6、如权利要求5所述的方法,其特征在于,所述转换成SQL语句的步骤包括将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。7、一种将Script语言转换成SQL语言的装置,其特征在于,包括获取单元,用于获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;配置单元,用于生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;解析单元,用于解析所述业务规则,获得语法元素及相应的数据处理逻辑;转换单元,用于根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。8、如权利要求7所述的装置,其特征在于,还包括确定单元,用于根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;执行单元,用于按照所述顺序逻辑执行所述SQL语句。9、如权利要求8所述的装置,其特征在于,所述确定单元包括森林创建子单元,用于根据所述数据处理逻辑创建森林;生成子单元,用于对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。10、如权利要求7、8或9所述的装置,其特征在于,所述解析单元包括语法树建立子单元,用于根据所述业务规则建立Script语法树;提取子单元,用于遍历所述语法树,提取其中的语法元素及数据处理逻辑。11、如权利要求IO所述的装置,其特征在于,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。12、如权利要求11所述的装置,其特征在于,所述转换单元包括格式化子单元,用于将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。全文摘要本发明公开了一种将Script语言转换成SQL语言的方法,包括获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;解析所述业务规则,获得语法元素及相应的数据处理逻辑;根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。本发明可以通过在具体的数据库中执行SQL语句,以实现复杂业务逻辑地处理,以及批量处理功能,获得较强业务处理能力。文档编号G06F17/30GK101105814SQ20071014542公开日2008年1月16日申请日期2007年9月11日优先权日2007年9月11日发明者磊张申请人:金蝶软件(中国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1