CN101105814A - 一种将Script语言转换成SQL语言的方法及装置 - Google Patents

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

Info

Publication number
CN101105814A
CN101105814A CNA2007101454247A CN200710145424A CN101105814A CN 101105814 A CN101105814 A CN 101105814A CN A2007101454247 A CNA2007101454247 A CN A2007101454247A CN 200710145424 A CN200710145424 A CN 200710145424A CN 101105814 A CN101105814 A CN 101105814A
Authority
CN
China
Prior art keywords
syntactic element
sql
language
business rule
data process
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA2007101454247A
Other languages
English (en)
Inventor
张磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kingdee Software China Co Ltd
Original Assignee
Kingdee Software China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kingdee Software China Co Ltd filed Critical Kingdee Software China Co Ltd
Priority to CNA2007101454247A priority Critical patent/CN101105814A/zh
Publication of CN101105814A publication Critical patent/CN101105814A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种将Script语言转换成SQL语言的方法,包括:获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;解析所述业务规则,获得语法元素及相应的数据处理逻辑;根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。本发明可以通过在具体的数据库中执行SQL语句,以实现复杂业务逻辑地处理,以及批量处理功能,获得较强业务处理能力。

Description

一种将Script语言转换成SQL语言的方法及装置
技术领域
本发明涉及程序语言转换处理领域,特别涉及一种需要将反映在数据库中的Script语言转换成SQL语言的方法及装置。
背景技术
Script语言是一种脚本程序语言的统称,包括JavaScript、VBScript、Applet Script、Script等,其主要用于描述业务规则,定义元素之间的相互关系。SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取资料以及查询、更新和管理关联式数据库系统,SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。不需要用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。它以记录集合作为操纵对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语言可以嵌套,在多数情况下,在其它语言中需要一大段程序实现的一个单独事件只需要一个SQL语句就可以达到目的。
在实际中,相关技术人员在软件实现时,通常会遇到需要将Script语言描述的业务规则反映到数据库中的情况,例如,在财务软件中,对于工资计算功能通常需要采用公式定义,以体现各个工资项目之间存在的依赖关系和数量关系,如:实发工资=基本工资-保险+补贴,在这种情况下,现有技术的解决方案为,在Script语言的环境下,提供相应的变量,通过计算控件完成计算。其中,计算控件采用内置的脚本执行器进行计算,然后返回计算结果。然而,这种方法只能在客户端进行低效地计算,一次执行只得到一个单元格的值,不能支持批量处理;并且,由于Script语言的局限性,这种方法只能处理简单的业务逻辑,不支持复杂业务逻辑的处理。
因此,本领域技术人员迫切需要发展出一种对于需要反映到数据库中的Script语言,可以将其转换成SQL语言以获得较强业务处理能力的方法及装置。
发明内容
本发明所要解决的技术问题是提供一种将Script语言转换成SQL语言的方法,用以将需要反映到数据库中的Script语言转换成SQL语言,以获得SQL的业务处理能力,从而实现复杂业务逻辑地处理,以及批量处理功能。
本发明还提供了一种将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的流程图,具体包括以下步骤:
步骤101、获取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个部分组成:第一、数据定义(SQL DDL):用于定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引四个部分。第二、数据操纵(SQL DML):包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。第三、数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。第四、嵌入式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和SqlExpr的两套类体系,例如,参考图2,示出了现有技术中一种Kscript语言的类体系示意图,参考图3,示出了现有技术中一种KSQL语言的类体系示意图。具体而言,在Script语言中,表达式通常可以分为二元表达式、函数表达式、字符串表达式、浮点表达式、整数表达式、标记符表达式等;在SQL语言中,表达式通常可以分为between表达式、in表达式、Null表达式等,公知的是,上述表达式的关系采用合成(Composite)模式,这种模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化为“一对一”的关系,使得客户代码可以一致地处理对象和对象容器,而无需关心处理的是单个对象,还是组合的对象容器。实际上,将“客户代码与复杂的对象容器结构”解耦是这种合成模式的核心思想,解耦之后,客户代码将与纯粹的对象接口(而非对象容器的复杂内部实现结构)发生依赖关系,从而更能应对变化。例如,二元表示式通常由各种各样的表达式按二叉树结构组成。
基于上述关系,在本实施例中,本领域技术人员需要根据具体情况任意设置配置表,用以定义Script语言中的语法元素所对应的表名、字段、关系等配置关系,例如,获得Scrip语言定义的业务规则可以采用如以下代码所示的流程:
If(C==100){
   A=B+C
   }
   C=B+10;
   生成所述语法元素的配置表为:
    元素   表     字段     关系
    A   table1     F1
    B   table1     F2
    C   table2     F1     table1.FA=table2.FA
在本实施例中,优选的是,所述解析步骤103还可以包括以下子步骤:
子步骤A1、根据所述业务规则建立Script语法树;
子步骤A2、遍历所述语法树,提取其中的语法元素及数据处理逻辑。
由于所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。在这种情况下,可以通过以下子步骤将所述业务规则转换成SQL语句:
将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。
其中,所述语法元素中的表达式通常为属性表达式。
更为优选的是,为保证表达式的转换后的可识别性,所述转换成SQL语句的步骤还可以进一步包括以下子步骤:
将所述表达式中的数值和字符转换成SQL形式的数值和字符。
为使本领域技术人员更好地理解本发明,以下辅以代码通过具体实例详细地说明本实施例的转换过程:
第一步,从公式定义器中获得符合Script语法的Script语言脚本;
第二步,获得所述脚本的业务逻辑;
例如,可以采用如以下代码所示的流程实现:
/*
    *公式的业务规则
    */
    private void scriptBizRuleCheck(List stmtList)throwsEASBizException
    {
         if(stmtList.size()!=1)
         {
             throw new CompenItemFormuleException(
CompenItemFormuleException.BIZ_MORESTMT_EXEC);
         }
         CodeStmt stmt=(CodeStmt)stmtList.get(0);
         if(stmt instanceof IfStmt||stmt instanceof ExprStmt)
         {
         }
         else
         {
             throw new CompenItemFormuleException(
CompenItemFormuleException.BIZ_NOTSUPPORTSTMT_EXEC);
         }
         if(stmt instanceof IfStmt)
         {
              IfStmt ifStmt=(IfStmt)stmt;
              if(ifNestCheck((IfStmt)stmt))
              {
                  throw new CompenItemFormuleException(
CompenItemFormuleException.BIZ_NEST_EXEC);
              }
              //所有的语句块只可有一个语句
              if(ifStmt.trueStmtList.size()>1)
             {
                 throw new CompenItemFormuleException(
CompenItemFormuleException.BIZ_MOREEXPR_EXEC);
             }
             for(int i=0,size=ifStmt.elseIfList.size();i<size;i++)
             {
                  if(((ElseIfItem)ifStmt.elseIfList.get(i)).stmtList.size()>1)
                  {
                       throw new CompenItemFormuleException(
CompenItemFormuleException.BIZ_MOREEXPR_EXEC);
                  }
             }
             if(ifStmt.elseStmtList.size()>1)
             {
                  throw new CompenItemFormuleException(
CompenItemFormuleException.BIZ_MOREEXPR_EXEC);
             }
         }
    }
第三步,根据所述脚本的类型分别遍历语句中的所有表达式,根据不同类型的表达式进行相应处理。
例如,对于二元表达式,生成字符串后马上构造出对应的SQL二元表达式;对于字符串表达式,则进一步分析是否为枚举类型的项目。
可以通过以下代码实现:
//格式化公式,把属性表达式转换成标记表达式;把函数转换成SQL函数
private CodeExpr formatExpr(CodeExpr expr)
          throws CompenItemFormuleException
{
   if(expr instanceof PropertyExpr)
   {
        expr=proptExprCheck((PropertyExpr)expr);
        return expr;
   }
   if(expr instanceof StringExpr)
   {
        expr=constantCheck((StringExpr)expr);
        return expr;
   }
   if(expr instanceof BoolExpr)
   {
        if(((BoolExpr)expr).val)
        {
              return new IntExpr(1);
        }
        else
        {
              return new IntExpr(0);
        }
   }
   if(expr instanceof MethodInvokeExpr)
   {
        //只能处理SQL支持的函数
        expr=methodCheck((MethodInvokeExpr)expr);
             String methodName=((MethodInvokeExpr)expr).methodName;
             if(SQLMETHODLIST.indexOf(methodName)<0)
             {
                  throw new CompenItemFormuleException(
CompenItemFormuleException.MODTH_NOT_SUPPORT);
             }
         }
         if(expr instanceof BinaryOpExpr)
         {
              ((BinaryOpExpr)expr).left=formatExpr(((BinaryOpExpr)expr).left);
              ((BinaryOpExpr)expr).right=formatExpr(((BinaryOpExpr)expr).right);
              return expr;
         }
         return expr;
    }
第四步、对Script表达式中的特殊地方进行处理。
例如,大于10000000的浮点数在Script语言中是采用科学计数法表示的,而在SQL语言中是不被接受的;或者,字符串在Script语言中用双引号表示,而在SQL语言中是用单引号表示的等等。
private String formatNumberAndComma(String Script)
  {
        Pattern p=Pattern.compile(″[\\d][.](\\d)*E(\\d)*″);
        Matcher m=p.matcher(Script);
        String temp=″″;
        StringBufferrst=new StringBuffer();
        int start=0,end=0,tag=0;
     BigDecimal big=null;
     while(m.find())
     {
          start=m.start();
          end=m.end();
          temp=Script.substring(start,end);
          big=new BigDecimal(temp);
          rst.append(Script.substring(tag,start));
          rst.append(big.toString());
          tag=end;
    }
    rst.append(Script.substring(end));
    //把双引号换成单引号
    return rst.toString().replaceAll(″\″″,″);
}
参照图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。可以理解,如果在一个方案中存在很多项目,则可能存在多重依赖关系。
为解决这个问题,应用本实施例进行排序的一种优选过程可以为:
一、分析项目公式,根据它们的依赖关系建立起这一片森林;
二、按照广度优先的算法进行遍历,按照多个可达路径取其最远路径的原则,建立起顺序表。
由于这是一个极为通用的算法,所以可以完全抽象出来,使这片森林的数据结构和遍历使用一个类——DependForest实现,树林中的节点用类Node表示。
例如,可以采用以下代码所示的流程实现:
public class DependForest
{
     Map allItem=new HashMap();
     Map allRoot=new HashMap();
     public DependForest()
     {
}
/*
*查找图中的某个节点,返回一个值对(Key-Value),key是找到的节点,Value是该节点所处的位置;如果没有找到则返回-1,表示找不到
  */
private int findNode(String nodeName)
{
     //省略非关键代码
}
private int findeNodeFromTree(Node root,String targetNodeName,int level)
{
     //省略非关键代码
}
/*
*移动节点,节点只能从浅处往深处移动,即只能往高处移动,越高表示越早被别的项目依赖。
*/
private void moveNode(Node node,Node parent)
{
     //省略非关键代码
}
//构建森林
public void build(List compensItems)
{
     for(int i=0,size=compensItems.size();i<size;i++)
     {
          addNode((DependNode)compensItems.get(i));
     }
}
private void addNode(DependNode item)
{
      Node newNode=null;
      if(!this.allItem.containsKey(item.getName()))
      {
            newNode=new Node(item.getName());
            this.allRoot.put(newNode.getName(),newNode);
            this.allItem.put(newNode.getName(),newNode);
      }
      else
      {
            newNode=(Node)this.allItem.get(item.getName());
      }
      //找到item所处的位置
      int newNodeLeve=findNode(item.getName());
      int childLevel;
      List children=item.getDependItem();
      for(inti=0,size=children.size();i<size;i++)
      {
           String childName=((DependNode)children.get(i)).getName();
           childLevel=findNode(childName);
           if(childLevel==-1)
              {
                   //插入到insNode下
                   Node newNodeChild=new Node(childNamenewNode);
                   this.allItem.put(newNodeChild.getName()newNodeChild);
                   newNode.getChildren().add(newNodeChild);
              }
             else if(childLevel<newNodeLeve+1)
              {
                    moveNode((Node) this.allItem.get(childName)newNode);
              }
          }
     }
//遍历,得到最终结果
     public List travelForest()
     {
          List rst=new ArrayList();
          Iterator itl=this.allRoot.keySet().iterator();
          while(itl.hasNext())
          {
              travelTree((Node)this.allRoot.get(itl.next()),0,rst);
          }
          return rst;
     }
     private void travelTree(Node root,int level,List allNodeLevel)
     {
          Map nodeLevel=new HashMap();
          nodeLevel.put(root.getName(),new Integer(level));
          allNodeLevel.add(nodeLevel);
          if(root.getChildren().size()>0)
          {
               level++;
               for(int i=0,size=root.getChildren().size();i<size;
i++)
               {
                    travelTree((Node)root.getChildren().get(i),level,
                               allNodeLevel);
               }
         }
         level--;
}
Class Node
{
//树中的节点,内部类,省略非关键代码
}
}
为使本领域技术人员更好地理解本发明,以下通过一种应用本实施例将Script语言转换成SQL语言的具体实例进行说明:
步骤S1、获得Scrip语言定义的业务规则可以采用以下代码所示的流程实现:
If(C==100) {
   A=B+C
}
C=B+10;
步骤S2、生成所述语法元素的配置表为:
    元素     表     字段     关系
    A     table1     F1
    B     table1     F2
    C     table2     F1     table1.FA=table2.FA
步骤S3、解析所述业务规则,转换成具体的SQL语言,如下所示:
Update table1 set table1.F1=(select table1.F2+table2.F1 from table2Where table1.FA=table2.FA And table2.F1=100)where exist(selecttable1.F1 from table1,table2 where table1.FA=table2.FA and table2.F1=100);
Update table2 set table2.F1=(select table2.F2+10from table2 wheretable1.FA=table2.FA)Where exist(select table2.F1 from table1,table2where table1.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语言的标记表达式,将所述语法元素中的函数转换成SQL函数。
步骤605、确定单元根据所述数据处理逻辑确定所述SQL语句的顺序逻辑;
具体而言,该步骤可以通过以下子步骤实现:
子步骤D1、森林创建子单元根据所述数据处理逻辑创建森林;
子步骤D2、生成子单元对所述森林进行遍历,生成顺序逻辑表,所述顺序逻辑表用于记录所述SQL语句的顺序逻辑。
步骤606、执行单元按照所述顺序逻辑执行所述SQL语句。
对于装置实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明可以用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。此外,本发明还可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上对本发明所提供的一种将Script语言转换成SQL语言的方法及一种类将Script语言转换成SQL语言的装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种将Script语言转换成SQL语言的方法,其特征在于,包括:
获取Script语言定义的业务规则,所述业务规则为语法元素组成的数据处理逻辑;
生成所述语法元素的配置表,所述配置表包括所述语法元素及其对应的配置关系;
解析所述业务规则,获得语法元素及相应的数据处理逻辑;
根据所述语法元素及数据处理逻辑,调用所述配置表中相应的配置关系,将所述业务规则转换成SQL语句。
2.如权利要求1所述的方法,其特征在于,还包括:
根据所述数据处理逻辑确定所述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.如权利要求10所述的装置,其特征在于,所述语法元素包括标识符、数据类型、函数、表达式、运算符、注释和/或保留关键字。
12.如权利要求11所述的装置,其特征在于,所述转换单元包括:
格式化子单元,用于将所述语法元素中的表达式转换成SQL语言的标记表达式,将所述语法元素中的函数转换成SQL函数。
CNA2007101454247A 2007-09-11 2007-09-11 一种将Script语言转换成SQL语言的方法及装置 Pending CN101105814A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNA2007101454247A CN101105814A (zh) 2007-09-11 2007-09-11 一种将Script语言转换成SQL语言的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNA2007101454247A CN101105814A (zh) 2007-09-11 2007-09-11 一种将Script语言转换成SQL语言的方法及装置

Publications (1)

Publication Number Publication Date
CN101105814A true CN101105814A (zh) 2008-01-16

Family

ID=38999704

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA2007101454247A Pending CN101105814A (zh) 2007-09-11 2007-09-11 一种将Script语言转换成SQL语言的方法及装置

Country Status (1)

Country Link
CN (1) CN101105814A (zh)

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102520963A (zh) * 2011-12-26 2012-06-27 重庆新媒农信科技有限公司 基于强类型关系映射实现业务逻辑处理的方法及系统
CN102609403A (zh) * 2011-01-26 2012-07-25 微软公司 按示例格式化数据
CN102768682A (zh) * 2012-06-28 2012-11-07 用友软件股份有限公司 业务规则处理装置和业务规则处理方法
CN102830975A (zh) * 2012-08-15 2012-12-19 深圳市翌日科技有限公司 一种汇编语言到高级语言的代码转换方法和装置
CN101576925B (zh) * 2009-06-24 2013-03-27 用友软件股份有限公司 寻址方法和装置
CN103209094A (zh) * 2013-03-11 2013-07-17 中国科学院信息工程研究所 一种基于事件的故障定位系统及方法
CN102073490B (zh) * 2009-11-25 2013-09-11 阿里巴巴集团控股有限公司 转译数据库语言的方法及装置
CN103984578A (zh) * 2014-05-29 2014-08-13 中国银行股份有限公司 一种cobol程序版本的更新方法及装置
CN104951286A (zh) * 2014-03-25 2015-09-30 阿里巴巴集团控股有限公司 一种将MapReduce转换为SQL的方法和装置
CN105786932A (zh) * 2014-12-26 2016-07-20 北大医疗信息技术有限公司 医疗系统中临床业务的查询方法及查询装置
CN105868204A (zh) * 2015-01-21 2016-08-17 中国移动(深圳)有限公司 一种转换Oracle脚本语言SQL的方法及装置
CN107656726A (zh) * 2017-10-10 2018-02-02 北京元比特科技有限责任公司 一种互联网信息及技术共享平台及方法
CN107832387A (zh) * 2017-10-31 2018-03-23 北京酷我科技有限公司 一种基于fmdb的sql语句解析方法
US10013413B2 (en) 2013-06-14 2018-07-03 Microsoft Technology Licensing, Llc Smart fill
CN108388588A (zh) * 2018-01-30 2018-08-10 福建星瑞格软件有限公司 sql语句自动生成工具的数据库函数离线读取方法及系统
CN108399196A (zh) * 2018-01-30 2018-08-14 福建星瑞格软件有限公司 数据库sql语句自动生成工具的sql自动执行方法及系统
CN109062918A (zh) * 2018-05-31 2018-12-21 阿里巴巴集团控股有限公司 一种sql语句转换的方法及装置
CN109522319A (zh) * 2018-11-12 2019-03-26 北京懿医云科技有限公司 基于dsl的数据映射方法及装置、电子设备、存储介质
CN110688398A (zh) * 2019-08-21 2020-01-14 西藏自治区藏医院(西藏自治区藏医药研究院) 一种藏历天文历算的演示方法及系统
CN110795168A (zh) * 2018-08-02 2020-02-14 武汉斗鱼网络科技有限公司 一种获取数据的方法及相关装置
CN110866028A (zh) * 2019-10-10 2020-03-06 微梦创科网络科技(中国)有限公司 一种sql指令生成方法及系统
CN111052077A (zh) * 2017-08-25 2020-04-21 日立社会信息服务有限公司 变换装置以及变换方法
CN111815460A (zh) * 2020-04-20 2020-10-23 国泰财产保险有限责任公司 基于互联网保险数据平台的保费计算程序生成方法及装置
US10824799B2 (en) 2014-06-30 2020-11-03 Microsoft Technology Licensing, Llc Summary data autofill
CN112328621A (zh) * 2020-11-05 2021-02-05 中国平安财产保险股份有限公司 Sql转换方法、装置、计算机设备及计算机可读存储介质
CN114117025A (zh) * 2022-01-28 2022-03-01 阿里巴巴达摩院(杭州)科技有限公司 信息查询方法、装置、存储介质及系统

Cited By (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101576925B (zh) * 2009-06-24 2013-03-27 用友软件股份有限公司 寻址方法和装置
CN102073490B (zh) * 2009-11-25 2013-09-11 阿里巴巴集团控股有限公司 转译数据库语言的方法及装置
CN102609403B (zh) * 2011-01-26 2015-05-20 微软公司 按示例格式化数据
CN102609403A (zh) * 2011-01-26 2012-07-25 微软公司 按示例格式化数据
US10409892B2 (en) 2011-01-26 2019-09-10 Microsoft Technology Licensing, Llc Formatting data by example
CN102520963B (zh) * 2011-12-26 2014-10-01 重庆新媒农信科技有限公司 基于强类型关系映射实现业务逻辑处理的方法及系统
CN102520963A (zh) * 2011-12-26 2012-06-27 重庆新媒农信科技有限公司 基于强类型关系映射实现业务逻辑处理的方法及系统
CN102768682A (zh) * 2012-06-28 2012-11-07 用友软件股份有限公司 业务规则处理装置和业务规则处理方法
CN102768682B (zh) * 2012-06-28 2015-10-21 用友网络科技股份有限公司 业务规则处理装置和业务规则处理方法
CN102830975A (zh) * 2012-08-15 2012-12-19 深圳市翌日科技有限公司 一种汇编语言到高级语言的代码转换方法和装置
CN102830975B (zh) * 2012-08-15 2015-11-18 深圳市翌日科技有限公司 一种汇编语言到高级语言的代码转换方法和装置
CN103209094A (zh) * 2013-03-11 2013-07-17 中国科学院信息工程研究所 一种基于事件的故障定位系统及方法
CN103209094B (zh) * 2013-03-11 2016-06-01 中国科学院信息工程研究所 一种基于事件的故障定位系统及方法
US10013413B2 (en) 2013-06-14 2018-07-03 Microsoft Technology Licensing, Llc Smart fill
US10229101B2 (en) 2013-06-14 2019-03-12 Microsoft Technology Licensing, Llc Smart fill
CN104951286B (zh) * 2014-03-25 2018-07-06 阿里巴巴集团控股有限公司 一种将MapReduce转换为SQL的方法和装置
CN104951286A (zh) * 2014-03-25 2015-09-30 阿里巴巴集团控股有限公司 一种将MapReduce转换为SQL的方法和装置
CN103984578B (zh) * 2014-05-29 2017-08-25 中国银行股份有限公司 一种cobol程序版本的更新方法及装置
CN103984578A (zh) * 2014-05-29 2014-08-13 中国银行股份有限公司 一种cobol程序版本的更新方法及装置
US10824799B2 (en) 2014-06-30 2020-11-03 Microsoft Technology Licensing, Llc Summary data autofill
CN105786932A (zh) * 2014-12-26 2016-07-20 北大医疗信息技术有限公司 医疗系统中临床业务的查询方法及查询装置
CN105786932B (zh) * 2014-12-26 2020-03-27 北大医疗信息技术有限公司 医疗系统中临床业务的查询方法及查询装置
CN105868204A (zh) * 2015-01-21 2016-08-17 中国移动(深圳)有限公司 一种转换Oracle脚本语言SQL的方法及装置
CN105868204B (zh) * 2015-01-21 2019-06-21 中移信息技术有限公司 一种转换Oracle脚本语言SQL的方法及装置
CN111052077B (zh) * 2017-08-25 2023-09-29 日立社会信息服务有限公司 变换装置以及变换方法
CN111052077A (zh) * 2017-08-25 2020-04-21 日立社会信息服务有限公司 变换装置以及变换方法
CN107656726A (zh) * 2017-10-10 2018-02-02 北京元比特科技有限责任公司 一种互联网信息及技术共享平台及方法
CN107832387B (zh) * 2017-10-31 2021-07-13 北京酷我科技有限公司 一种基于fmdb的sql语句解析方法
CN107832387A (zh) * 2017-10-31 2018-03-23 北京酷我科技有限公司 一种基于fmdb的sql语句解析方法
CN108399196A (zh) * 2018-01-30 2018-08-14 福建星瑞格软件有限公司 数据库sql语句自动生成工具的sql自动执行方法及系统
CN108388588A (zh) * 2018-01-30 2018-08-10 福建星瑞格软件有限公司 sql语句自动生成工具的数据库函数离线读取方法及系统
CN109062918A (zh) * 2018-05-31 2018-12-21 阿里巴巴集团控股有限公司 一种sql语句转换的方法及装置
CN110795168B (zh) * 2018-08-02 2022-11-11 武汉斗鱼网络科技有限公司 一种获取数据的方法及相关装置
CN110795168A (zh) * 2018-08-02 2020-02-14 武汉斗鱼网络科技有限公司 一种获取数据的方法及相关装置
CN109522319A (zh) * 2018-11-12 2019-03-26 北京懿医云科技有限公司 基于dsl的数据映射方法及装置、电子设备、存储介质
CN110688398A (zh) * 2019-08-21 2020-01-14 西藏自治区藏医院(西藏自治区藏医药研究院) 一种藏历天文历算的演示方法及系统
CN110688398B (zh) * 2019-08-21 2023-10-13 西藏自治区藏医院(西藏自治区藏医药研究院) 一种藏历天文历算的演示方法及系统
CN110866028A (zh) * 2019-10-10 2020-03-06 微梦创科网络科技(中国)有限公司 一种sql指令生成方法及系统
CN111815460A (zh) * 2020-04-20 2020-10-23 国泰财产保险有限责任公司 基于互联网保险数据平台的保费计算程序生成方法及装置
CN112328621A (zh) * 2020-11-05 2021-02-05 中国平安财产保险股份有限公司 Sql转换方法、装置、计算机设备及计算机可读存储介质
CN112328621B (zh) * 2020-11-05 2023-11-21 中国平安财产保险股份有限公司 Sql转换方法、装置、计算机设备及计算机可读存储介质
CN114117025A (zh) * 2022-01-28 2022-03-01 阿里巴巴达摩院(杭州)科技有限公司 信息查询方法、装置、存储介质及系统
CN114117025B (zh) * 2022-01-28 2022-05-17 阿里巴巴达摩院(杭州)科技有限公司 信息查询方法、装置、存储介质及系统

Similar Documents

Publication Publication Date Title
CN101105814A (zh) 一种将Script语言转换成SQL语言的方法及装置
Hagedorn et al. The STARK framework for spatio-temporal data analytics on spark
US10460277B2 (en) Business intelligence language macros
Fan et al. The Case Against Specialized Graph Analytics Engines.
CN104346377B (zh) 一种基于唯一标识的数据集成和交换方法
Mazairac et al. BIMQL–An open query language for building information models
Vajk et al. Denormalizing data into schema-free databases
US11023443B2 (en) Collaborative planning for accelerating analytic queries
CN102426582B (zh) 数据操作管理装置和数据操作管理方法
CN101770363A (zh) 代码转换
US8037039B2 (en) Runtime class database operation
CN105718593A (zh) 一种数据库查询优化方法及系统
CN103262076A (zh) 分析数据处理
CN101233512A (zh) 用于持续对象检索的智能sql产生
RU2704873C1 (ru) Система и способ управления базами данных (субд)
CN110019287B (zh) 执行结构化查询语言sql指令的方法和装置
CN101208660A (zh) 代码转换
CN114691786A (zh) 数据血缘关系的确定方法及装置、存储介质、电子装置
CN104679511A (zh) 基于MDE模型转换的MapReduce代码生成方法
Scharffe et al. Correspondence patterns for ontology alignment
Burgueño et al. On the concurrent execution of model transformations with linda
Jiang et al. Automatic building information model query generation
Iglesias-Molina et al. An ontological approach for representing declarative mapping languages
US10140335B2 (en) Calculation scenarios with extended semantic nodes
Zepeda et al. A mixed approach for data warehouse conceptual design with MDA

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C12 Rejection of a patent application after its publication
RJ01 Rejection of invention patent application after publication