CN106919612B - 一种上线结构化查询语言脚本的处理方法及装置 - Google Patents

一种上线结构化查询语言脚本的处理方法及装置 Download PDF

Info

Publication number
CN106919612B
CN106919612B CN201510998851.4A CN201510998851A CN106919612B CN 106919612 B CN106919612 B CN 106919612B CN 201510998851 A CN201510998851 A CN 201510998851A CN 106919612 B CN106919612 B CN 106919612B
Authority
CN
China
Prior art keywords
sql
statement
syntax
script
online
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.)
Active
Application number
CN201510998851.4A
Other languages
English (en)
Other versions
CN106919612A (zh
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.)
China Mobile Group Zhejiang Co Ltd
Original Assignee
Shanghai New Century Network Co ltd
China Mobile Group Zhejiang 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 Shanghai New Century Network Co ltd, China Mobile Group Zhejiang Co Ltd filed Critical Shanghai New Century Network Co ltd
Priority to CN201510998851.4A priority Critical patent/CN106919612B/zh
Publication of CN106919612A publication Critical patent/CN106919612A/zh
Application granted granted Critical
Publication of CN106919612B publication Critical patent/CN106919612B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种上线结构化查询语言脚本的处理方法,所述方法包括:获得文件列表中当前处理文件的上线SQL脚本;审查所述上线SQL脚本中的SQL语句,输出错误信息,所述错误信息包括所述上线SQL脚本中的错误SQL语句或错误注释的位置信息及错误说明,所述错误信息用于提示操作人员对所述错误SQL语句或错误注释进行修改;针对通过审查的规范SQL语句,根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并。本发明实施例公开了一种上线结构化查询语言脚本的处理装置。

Description

一种上线结构化查询语言脚本的处理方法及装置
技术领域
本发明涉及数据库领域,尤其涉及一种结构化查询语言(Structured QueryLanguage,SQL)脚本的处理方法及装置。
背景技术
大型企业信息技术(Information Technology,IT)系统庞大复杂,业务需求旺盛,为快速响应新功能需求,IT系统需要快速频繁迭代实施IT系统的上线。而大部分新功能需求上线都会涉及IT系统数据模型(Data Model)的变更,因此每次新功能需求上线都有可能对支撑IT系统的数据库物理模型进行变更。
正常的IT系统上线流程一般分为需求分析、开发、测试、上线4个环节,其中上线环节需要通过执行若干个数据库的上线SQL脚本来实现对数据库物理模型的变更,这里执行的上线SQL脚本是一种实现静态、离线的数据库物理模型和配置数据变更的SQL代码,而不是用于满足实际IT系统业务功能需要而开发的查询、统计和持久化数据库数据的SQL代码;通常情况下上线环节执行的上线SQL脚本数量远远大于上线需求量,每次上线环节执行的上线SQL 脚本数量均数以百计。
在传统的上线环节中,开发人员、测试人员及项目管理者更多的注重应用程序的功能完善性和代码可靠性,而对上线SQL脚本的正确规范性重视不足,故时常出现由于上线SQL脚本发布错误而导致IT系统上线延迟或上线回退的问题,因此,对上线SQL脚本进行审查是保证IT系统顺利上线的关键。
目前,对上线SQL脚本的审查通常采用手工方式,即,由数据库开发管理员手工逐个对上线SQL脚本的合规性进行测试,如果发现上线SQL脚本不合规,手工进行修改。然而,采用手工方式上线SQL脚本进行优化存在以下几个方面的问题:
(1)人力成本高:由于每次IT系统上线涉及的上线SQL脚本的数量众多,如电信BSS(Basic Service Set,基本服务集)系统的每次日常上线会涉及至少几十个业务需求、几百个SQL脚本的变更发布,需要大量的数据库开发管理员测试并优化上线SQL脚本,人力成本高。
(2)上线SQL脚本的质量得不到保证:由于开发人员对编写上线SQL脚本依据的规范文档的理解不一致,导致编写的上线SQL脚本质量良莠不齐,而数据库开发管理员对上线SQL脚本的合规性测试也完全依赖于个人经验判断,很难全面把控上线SQL脚本的质量。
(3)上线SQL脚本的执行效率不高:现有技术只是对上线SQL脚本中的 SQL语句进行合规性检测,并不对上线SQL脚本进行合并等优化,上线SQL 脚本数目仍然很多,在执行众多上线SQL脚本上线过程中,由于上线SQL脚本间的关系错综复杂,而数据库开发管理员需要大量复制、粘贴上线SQL脚本到执行框中,在复制、粘贴操作中,很难保证上线SQL脚本不发生错误,同时,复制、粘贴操作需要花费大量的执行时间,因此,数据库上线SQL脚本的执行效率不高。
综上所述,现有的采用人工方式对上线SQL脚本进行审查时,存在人力成本高、上线SQL脚本的质量得不到保证、执行效率不高等问题,影响IT系统的上线进度。
发明内容
有鉴于此,本发明实施例期望提供一种上线SQL脚本的处理方法及装置,可以降低人力成本,保证脚本质量,提高执行效率。
为达到上述目的,本发明的技术方案是这样实现的:
一种上线结构化查询语言SQL脚本的处理方法,所述方法包括:
获得文件列表中当前处理文件的上线SQL脚本;
审查所述上线SQL脚本中的SQL语句,输出错误信息,所述错误信息包括所述上线SQL脚本中的错误SQL语句或错误注释的位置信息及错误说明,所述错误信息用于提示操作人员对所述错误SQL语句或错误注释进行修改;
针对通过审查的规范SQL语句,根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并。
上述方案中,所述审查所述上线SQL脚本中的SQL语句,输出错误信息,包括:
提取所述上线SQL脚本中的SQL语句,输出无效信息,所述无线信息包括所述上线SQL脚本中不能被提取的无效SQL语句或无效注释的位置信息、无效说明,所述无线信息用于所述提示操作人员对所述无效SQL语句或无效注释进行修改;
对通过提取的有效SQL语句进行语法分析,输出语法错误信息,所述语法错误信息包括有语法错误的SQL语句的位置信息和语法错误说明,所述语法错误信息用于所述提示所述操作人员对所述语法错误的SQL语句进行修改。
上述方案中,在对所述有效SQL语句进行语法分析时,所述方法还包括:
在对所述有效SQL语句进行语法分析确定所述有效SQL语句为语法正确的规范SQL语句时,获取所述规范SQL语句的语法结构生成所述规范SQL语句的语法树,所述语法树中包括关键字和操作对象。
上述方案中,所述根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并,包括:
将所述规范SQL语句的语法树与预设规则库中语句类型表进行匹配,确定所述规范SQL语句的语句类型;其中,所述语句类型表包括SQL语句的关键字和操作对象与语句类型的对应关系;
将所述规范SQL语句的语句类型与所述预设规则库中的规则对应表进行匹配,获得所述规范SQL语句的语句类型对应的分组编号和优先级,其中,所述规则对应表包括SQL语句的语句类型对应的分组编号和优先级;
将所述文件列表的各处理文件中,属于同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中。
上述方案中,在所述属于同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中后,所述方法还包括:
在合并后的SQL脚本中的每一条SQL 代码后加入执行终止代码。
一种上线结构化查询语言SQL脚本的处理装置,所述装置包括:
获得单元,用于获得文件列表中当前处理文件的上线SQL脚本;
审查单元,用于审查所述获得单元获得的所述上线SQL脚本中的SQL语句,输出错误信息,所述错误信息包括所述上线SQL脚本中的错误SQL语句或错误注释的位置信息及错误说明,所述错误信息用于提示操作人员对所述错误SQL语句或错误注释进行修改;
合并单元,用于针对通过审查单元审查的规范SQL语句,根据规范SQL 语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并。
上述方案中,所述审查单元包括:提取子单元和语法分析子单元,其中,
所述提取子单元,用于提取所述获得单元获得的上线SQL脚本中的SQL 语句,输出无效信息,所述无线信息包括所述上线SQL脚本中不能被提取的无效SQL语句或无效注释的位置信息、无效说明,所述无线信息用于所述提示操作人员对所述无效SQL语句或无效注释进行修改;
所述语法分析子单元,用于对通过所述提取子单元提取的有效SQL语句进行语法分析,输出语法错误信息,所述语法错误信息包括有语法错误的SQL语句的位置信息和语法错误说明,所述语法错误信息用于所述提示所述操作人员对所述语法错误的SQL语句进行修改。
上述方案中,所述语法分析子单元,还用于在对所述有效SQL语句进行语法分析确定所述有效SQL语句为语法正确的规范SQL语句时,获取所述规范 SQL语句的语法结构生成所述规范SQL语句的语法树,所述语法树中包括关键字和操作对象。
上述方案中,所述合并单元包括匹配子单元和合并子单元,其中,
所述匹配子单元,用于将所述规范SQL语句的语法树与预设规则库中语句类型表进行匹配,确定所述规范SQL语句的语句类型;其中,所述语句类型表包括SQL语句的关键字和操作对象与语句类型的对应关系;将所述规范SQL 语句的语句类型与所述预设规则库中的规则对应表进行匹配,获得所述规范 SQL语句的语句类型对应的分组编号和优先级,其中,所述规则对应表包括SQL 语句的语句类型对应的分组编号和优先级;
所述合并子单元,用于将所述文件列表的各处理文件中,属于所述匹配子单元确定的同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中。
上述方案中,所述装置还包括加入单元,其中,
所述加入单元,还用于在所述合并单元合并后的SQL脚本中的每一条SQL 代码后加入执行终止代码。
本发明实施例提供了一种上线SQL脚本的处理方法及装置,获得文件列表中当前处理文件的上线SQL脚本;先自动审查所述上线SQL脚本中的SQL语句,输出错误信息,用于提示操作人员对所述错误SQL语句或错误注释进行修改;大大减少人工审查的工作量,提升了审查的效率与准确性,提升了上线SQL 脚本质量;然后针对通过审查的规范SQL语句,根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并,大大减少了上线SQL脚本数量,减少了上线执行SQL脚本的时间,减少了上线时应用停机时间,并且提升了业务质量。且合并后的各上线SQL脚本之间关系简单,保证数据库开发管理员的操作效率,进而提升上线SQL脚本的执行效率。
附图说明
图1为本发明实施例1提供的一种上线SQL脚本的处理方法的流程示意图;
图2为本发明实施例2提供的一种上线SQL脚本的处理装置的结构框图;
图3为本发明实施例3提供的另一种上线SQL脚本的处理装置的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
实施例1
本实施例提供了一种上线SQL脚本的处理方法,如图1所示,本实施例方法的处理流程包括以下步骤:
步骤101、获得文件列表中当前处理文件的上线SQL脚本。
在有新功能需求上线时,开发人员会先进行需求分析,然后按SQL语句的编写格式编写上线SQL脚本,上线SQL脚本的编写格式由实现编制的规范文档进行规范约束,SQL脚本的存储格式统一采用文本格式、并以.sql或.txt作为文件后缀。为避免后续处理装置读取上线SQL脚本时出现中文乱码,SQL脚本的编码格式采用统一的编码格式。开发人员编写好上线SQL脚本并存储后,处理装置会对这些上线SQL脚本进行审查。
在没有连接数据库即离线的情况下,处理装置可以通过程序接口读取当前处理文件中的上线SQL脚本,并将读取到的上线SQL脚本存入内存中。所述当前处理文件为需要上线的文件目录下的一个文件;处理装置需要先获取指定目录下的文件列表,然后对获取的文件列表按文件名进行排序,然后获取当前处理文件及其所在的文本位置,打开当前处理文件的句柄开始读取当前处理文件中的上线SQL脚本。
步骤102、审查所述上线SQL脚本中的SQL语句,输出错误信息。
所述处理装置读取完成当前处理文件中的上线SQL脚本后,会对存储在内存中的上线SQL脚本的SQL语句和注释进行审查,如果审查发现有错误SQL 语句或错误注释,就暂停审查,输出错误信息,所述错误信息包括所述上线SQL 脚本中的错误SQL语句或错误注释的位置信息及错误说明,所述错误信息用于提示操作人员对所述错误SQL语句或错误注释进行修改;操作人员看到该错误信息后,就会按照该错误说明修改相应位置处的错误SQL语句或错误注释。然后处理装置对修改后的SQL语句或注释重新进行审查,最终所述上线SQL脚本中的SQL语句和注释都通过审查后,表明该上线SQL脚本中SQL语句都为规范SQL语句。
可选的,对上线SQL脚本的审查过程可以如下步骤所述:
步骤S1、提取所述上线SQL脚本中的SQL语句,输出无效信息,所述无线信息包括所述上线SQL脚本中的无效SQL语句或无效注释的位置信息及无效说明,所述无线信息用于所述提示操作人员对所述无效SQL语句或无效注释进行修改。
所述处理装置在提取上线SQL脚本中的SQL语句和注释过程中,如果SQL 语句无法识别或注释格式不正确等,处理装置就不能提取出该上线SQL脚本中的SQL语句和注释,此时就认为发现了无效SQL语句或无效注释,所述处理装置会终止后续提取,记录所述上线SQL脚本中的无效SQL语句或无效注释的位置信息、无效说明这些无效信息,并输出该无效信息,提示操作人员根据无效说明对相应位置处的无效SQL语句或无效注释进行修改;操作人员修改完成后,处理装置对修改后的SQL语句或注释重新进行提取。
步骤S2、对通过提取的有效SQL语句进行语法分析,输出语法错误信息,所述语法错误信息包括有语法错误的SQL语句的位置信息和语法错误说明,所述语法错误信息用于所述提示所述操作人员对所述语法错误的SQL语句进行修改。
所述处理装置提取出所述SQL语句后,表明该SQL语句是有效的,对于有效的SQL语句,所述处理装置会对该有效SQL语句进行语法分析,处理装置可以先对提取的有效SQL语句进行词法分析,即分析获取该条有效SQL语句中的单词;在此基础上,对该条有效SQL语句进行语法分析,获取该条有效 SQL语句的语法结构;如果在语法分析过程中发现错误,则所述处理装置会终止对后续语句的语法分析,记录所述上线SQL脚本中的语法错误的SQL语句的位置信息及语法错误说明这些语法错误信息,并输出该语法错误信息,提示操作人员对相应位置处的语法错误的SQL语句进行修改;操作人员修改完成后,处理装置会对修改后的SQL语句或注释重新进行语法分析。这样最终所述上线 SQL脚本中的SQL语句和注释都通过语法分析后,表明该上线SQL脚本中SQL 语句都为语法正确的规范SQL语句。
处理装置在对所述有效SQL语句进行语法分析时,所述方法还包括:在对所述有效SQL语句进行语法分析确定所述有效SQL语句为语法正确的规范 SQL语句时,获取所述规范SQL语句的语法结构生成所述规范SQL语句的语法树,所述语法树中包括关键字和操作对象。
示例的,如对有效SQL语句“create table cas.table_id”进行语法分析时,可以先进行词法分析,获取该条有效SQL语句中的单词create、table、cas.table_id,然后进行语法分析获得该条有效SQL语句的关键字create和操作对象table,生成一个语法树,语法树是以树形结构来描述一条SQL语句的语法结构。在这里需要说明的是,上述进行语法分析以及生成语法树的方法为本领域人员都清楚了解的,在此不再详述。
根据上述步骤将当前文件中的上线SQL脚本审查完成后,就可以进行步骤 101获得文件列表中下一个处理文件中的上线SQL脚本,继续进行审查,直到将文件列表中的处理文件都审查完成。
步骤103、针对通过审查的规范SQL语句,根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并。
处理装置将所述文件列表的各处理文件中的SQL语句都审查完成后,针对这些通过审查的规范SQL语句,处理装置对所述文件列表的各处理文件中原有上线SQL脚本中的规范SQL语句进行拆分后,会根据规范SQL语句的语句类型,将某些原属于不同上线SQL脚本中的规范SQL语句合并在同一个上线SQL 脚本中。
可选的,拆分合并的过程如下步骤:
步骤Q1、将所述规范SQL语句的语法树与预设规则库中语句类型表进行匹配,确定所述规范SQL语句的语句类型。
其中,所述语句类型表包括SQL语句的关键字和操作对象与语句类型的对应关系。
示例的,如表1所示,一种SQL语句可以用一个正则表达式来表示,一种 SQL语句可以唯一对应一组关键字和操作对象,一组关键字和操作对象对应设置一个语句类型,如可以设置为在SQL语句的正则表达式为(DROP\s+ (TABLE)\s+[^;[:space:]]+[;]?\.?){1},即SQL语句的操作对象为TABLE关键字为DROP时,设置对应的语句类型为SQD1。
Figure BDA0000891167490000091
表1
所述语句类型表中存储有SQL语句的关键字和操作对象与语句类型的对应关系。故在语法分析所述规范SQL语句“create table cas.table_id”获得包含有关键字“create”和操作对象“table”的语法树后,可以用语法树与语句类型表中的关键字和操作对象进行匹配,确定所述规范SQL语句关键字为“create”且操作对象为“table”时对应的语句类型为“SQD3”。
步骤Q2、将所述规范SQL语句的语句类型与所述预设规则库中的规则对应表进行匹配,获得所述规范SQL语句的语句类型对应的分组编号和优先级。
其中,所述规则对应表包括SQL语句的语句类型对应的分组编号和优先级。
示例的,如表2所示,规则对应表中可以是规则表达式对应的分组编号和优先级,规则表达式由多个语句类型通过逻辑关系符号组合而成,标识多个语句类型的集合,所述逻辑关系符号包括与(&)、或(|)、非(!)。一个规则对应表内包含的各语句类型对应同一个分组编号和优先级。
Figure BDA0000891167490000101
表2
在设置上述规则表达式对应的分组编号和优先级时,是根据经验来制定的,如表2所示,可以将表示只删除对象的SQL语句设置一个分组编号RB1,将操作类型为新建的SQL语句设置一个分组编号RB2,但是操作类型为新建时,可以是只新建对象如新建表对象或新建索引对象;也可以是新建表指定表空间、新建索引指定表空间、不指定表空间属性等新建类型,这几个新建类型之间有一定的依赖关系,必然是先新建表对象或新建索引对象,才能新建表指定表空间,然后新建索引指定表空间、不指定表空间属性;如果将这几种语句类型的SQL语句采用不同的执行顺序可能会导致不同的处理结果,为解决这个问题引入优先级,优先级的设定是根据各SQL语句的依赖关系来设定的。如表2所示,可以按照该依赖关系将编号为2、3、4、5的规则表达式分别设置为分组编号为 RB2的第1、2、3、4优先级。
步骤Q3、将所述文件列表的各处理文件中,属于同一分组编号的规范SQL 语句按照优先级顺序合并到同一SQL脚本中。
通过上述匹配可以获得各规范SQL语句对应的分组编号和优先级;记录所述文件列表的各处理文件中SQL脚本的各规范SQL语句的分组编号和优先级;然后针对所述文件列表的所有处理文件的所有规范SQL语句,将属于同一分组编号的规范SQL语句合并在同一SQL脚本中,同一SQL脚本中处于同一优先级的规范SQL语句排列时无先后顺序,处于不同优先级的规范SQL语句按照优先级顺序排列。
示例的,假设所述文件列表的各处理文件中有以下三个规范SQL脚本:
脚本一:
create table cas.table_id(id int,name varchar2(30));
create table cas.table_list(id int,name varchar2(30));
脚本二:
create table cas.table_class(class_id int,name varchar2(30));
alter table cas.table_list add flag number;
脚本三:
insert into cas.table_list(id,name)values(1,'one');
alter table dbmon.table_class rename column name to class_name;
处理装置在对脚本1中的SQL语句进行语法分析生成语法树时,获得脚本一中第一条SQL语句的关键字为create和操作对象为table,匹配预设规则库中语句类型表后获得其语句类型为SQD3,然后与规则对应表进行匹配获得语句类型SQD3对应的分组编号为RB2,优先级为1。同理,处理装置匹配脚本一中第二条SQL语句的语句类型为SQD3,匹配的分组编号为RB2,优先级为1。
由于脚本一所有SQL语句属于同一分组编号,因此合并到一个脚本 RB2_20151119.sql中,由于两个语句的优先级都为1,故这两个SQL语句在脚本RB2_20151119.sql中没有先后顺序。
按照以上所述,处理装置匹配脚本二中第一条SQL语句的语句类型为 SQD3,匹配的分组编号为RB2优先级为1;匹配脚本二中第二条SQL语句的语句类型为SQD2,匹配的分组编号为RB3,优先级为1。
处理装置分析完脚本二后,发现脚本二第一条SQL语句的分组编号与脚本一相同,因此将该第一条SQL语句合并到脚本RB2_20151119.sql,脚本二第一条SQL语句的优先级也为1,故脚本二第一条SQL语句与脚本 RB2_20151119.sql中的SQL语句的排列没有先后顺序,可以排在脚本 RB2_20151119.sql的最后。脚本二第二条SQL语句的分组编号为:RB3,与上述的其他SQL语句不属于同一分组编号,故将第二条SQL语句放入脚本 RB3_20151119.sql中。即对脚本二中的SQL语句进行了拆分,并将其合并到相应的脚本中。
按照以上所述,处理装置匹配脚本三中第一条SQL语句的语句类型为 SQM1,匹配的分组编号为RB4,优先级为1;匹配脚本三中第二条语句的语句类型为SQD2,匹配的分组编号为RB3,优先级为1。
脚本三中第一条SQL语句的分组编号为RB4,与上述的其他SQL语句不属于同一分组编号,故将第一条SQL语句放入脚本RB4_20151119.sql中。脚本三第二条SQL语句的分组编号为RB3,与脚本二中第二条SQL语句的分组编号相同,故将脚本三第二条SQL语句合并到脚本RB3_20151119.sql中。即对脚本三中的SQL语句进行了拆分,并将其合并到相应的脚本中。
这样就完成了上述三个脚本的拆分合并,合并结果为:
脚本RB2_20151119.sql:
create table cas.table_id(id int,name varchar2(30));
create table cas.table_list(id int,name varchar2(30));
create table cas.table_class(class_id int,name varchar2(30));
脚本RB3_20151119.sql:
alter table cas.table_list add flag number;
alter table dbmon.table_class rename column name to class_name;
脚本RB4_20151119.sql:
insert into cas.table_list(id,name)values(1,'one');
可选的,处理装置将属于同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中后,还可以在合并后的SQL脚本中的每一条SQL 代码后加入执行终止代码。
处理装置将上线SQL脚本进行上述处理后,可以将处理后的SQL脚本直接输出到终端或保存到表格文档中。由于在每一条SQL 代码后加入有执行终止代码,在执行SQL脚本的过程中,在当前SQL语句执行异常后,可以中止上线SQL脚本执行,并打印错误SQL语句的代码与执行SQL语句的位置。
本实施例方法通过自动审查SQL脚本内容,大大减少人工审查的工作量,提升了审查的效率与准确性,提升了上线SQL脚本质量;通过SQL脚本中SQL 语句的拆分合并大大减少了上线SQL脚本数量,减少了上线执行SQL脚本的时间,减少了上线时应用停机时间,并且提升了业务质量。且合并后的各上线 SQL脚本之间关系简单,保证数据库开发管理员的操作效率,进而提升上线SQL 脚本的执行效率。
实施例2
本发明实施例还提供了一种上线SQL脚本的处理装置,如图2所示,所述装置包括:获得单元201,审查单元202,合并单元203,其中,
获得单元201,用于获得文件列表中当前处理文件的上线SQL脚本;
审查单元202,用于审查所述获得单元201获得的所述上线SQL脚本中的 SQL语句,输出错误信息,所述错误信息包括所述上线SQL脚本中的错误SQL 语句或错误注释的位置信息及错误说明,所述错误信息用于提示操作人员对所述错误SQL语句或错误注释进行修改;
合并单元203,用于针对通过审查单元202审查的规范SQL语句,根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并。
可选的,如图3所示,所述审查单元202包括:提取子单元2021和语法分析子单元2022,其中,
所述提取子单元2021,用于提取所述获得单元201获得的上线SQL脚本中的SQL语句,输出无效信息,所述无线信息包括所述上线SQL脚本中不能被提取的无效SQL语句或无效注释的位置信息、无效说明,所述无线信息用于所述提示操作人员对所述无效SQL语句或无效注释进行修改;
所述语法分析子单元2022,用于对通过所述提取子单元2021提取的有效 SQL语句进行语法分析,输出语法错误信息,所述语法错误信息包括有语法错误的SQL语句的位置信息和语法错误说明,所述语法错误信息用于所述提示所述操作人员对所述语法错误的SQL语句进行修改。
可选的,所述语法分析子单元2022,还用于在对所述有效SQL语句进行语法分析确定所述有效SQL语句为语法正确的规范SQL语句时,获取所述规范SQL语句的语法结构生成所述规范SQL语句的语法树,所述语法树中包括关键字和操作对象。
可选的,如图3所示,所述合并单元203包括匹配子单元2031和合并子单元2032,其中,
所述匹配子单元2031,用于将所述规范SQL语句的语法树与预设规则库中语句类型表进行匹配,确定所述规范SQL语句的语句类型;其中,所述语句类型表包括SQL语句的关键字和操作对象与语句类型的对应关系;将所述规范 SQL语句的语句类型与所述预设规则库中的规则对应表进行匹配,获得所述规范SQL语句的语句类型对应的分组编号和优先级,其中,所述规则对应表包括 SQL语句的语句类型对应的分组编号和优先级;
所述合并子单元2032,用于将所述文件列表的各处理文件中,属于所述匹配子单元2031确定的同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中。
可选的,如图3所示,所述装置还包括加入单元204,其中,
所述加入单元204,还用于在所述合并单元203合并后的SQL脚本中的每一条SQL代码后加入执行终止代码。
在实际应用中,本实施例中所述的获得单元201,审查单元202,合并单元 203和加入单元204可以由处理装置上的中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)或现场可编程门阵列(FPGA)、调制解调器等器件实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

Claims (8)

1.一种上线结构化查询语言SQL脚本的处理方法,其特征在于,所述方法包括:
获得文件列表中当前处理文件的上线SQL脚本;
提取所述上线SQL脚本中的SQL语句,输出无效信息,所述无效信息包括所述上线SQL脚本中不能被提取的无效SQL语句或无效注释的位置信息、无效说明,所述无效信息用于提示操作人员对所述无效SQL语句或无效注释进行修改;
对通过提取的有效SQL语句进行语法分析,输出语法错误信息,所述语法错误信息包括有语法错误的SQL语句的位置信息和语法错误说明,所述语法错误信息用于所述提示所述操作人员对所述语法错误的SQL语句进行修改,其中,所述语法分析用于获得包括关键字和操作对象的语法树;
针对通过审查的规范SQL语句,根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并。
2.根据权利要求1所述的方法,其特征在于,在对通过提取的有效SQL语句进行语法分析时,所述方法还包括:
在对所述有效SQL语句进行语法分析确定所述有效SQL语句为语法正确的规范SQL语句时,获取所述规范SQL语句的语法结构生成所述规范SQL语句的语法树,所述语法树中包括关键字和操作对象。
3.根据权利要求2所述的方法,其特征在于,所述根据规范SQL 语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并,包括:
将所述规范SQL语句的语法树与预设规则库中语句类型表进行匹配,确定所述规范SQL语句的语句类型;其中,所述语句类型表包括SQL语句的关键字和操作对象与语句类型的对应关系;
将所述规范SQL语句的语句类型与所述预设规则库中的规则对应表进行匹配,获得所述规范SQL语句的语句类型对应的分组编号和优先级,其中,所述规则对应表包括SQL语句的语句类型对应的分组编号和优先级;
将所述文件列表的各处理文件中,属于同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中。
4.根据权利要求3所述的方法,其特征在于,在所述属于同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中后,所述方法还包括:
在合并后的SQL脚本中的每一条SQL 代码后加入执行终止代码。
5.一种上线结构化查询语言SQL脚本的处理装置,其特征在于,所述装置包括:
获得单元,用于获得文件列表中当前处理文件的上线SQL脚本;
提取单元,用于提取所述获得单元获得的上线SQL脚本中的SQL语句,输出无效信息,所述无效信息包括所述上线SQL脚本中不能被提取的无效SQL语句或无效注释的位置信息、无效说明,所述无效信息用于提示操作人员对所述无效SQL语句或无效注释进行修改;
语法分析单元,用于对通过所述提取子单元提取的有效SQL语句进行语法分析,输出语法错误信息,所述语法错误信息包括有语法错误的SQL语句的位置信息和语法错误说明,所述语法错误信息用于所述提示所述操作人员对所述语法错误的SQL语句进行修改,其中,所述语法分析用于获得包括关键字和操作对象的语法树;
合并单元,用于针对通过审查单元审查的规范SQL语句,根据规范SQL语句的语句类型,对所述文件列表的各处理文件中的规范SQL语句进行拆分合并。
6.根据权利要求5所述的装置,其特征在于,
所述语法分析子单元,还用于在对所述有效SQL语句进行语法分析确定所述有效SQL语句为语法正确的规范SQL语句时,获取所述规范SQL语句的语法结构生成所述规范SQL语句的语法树,所述语法树中包括关键字和操作对象。
7.根据权利要求6所述的装置,其特征在于,所述合并单元包括匹配子单元和合并子单元,其中,
所述匹配子单元,用于将所述规范SQL语句的语法树与预设规则库中语句类型表进行匹配,确定所述规范SQL语句的语句类型;其中,所述语句类型表包括SQL语句的关键字和操作对象与语句类型的对应关系;将所述规范SQL语句的语句类型与所述预设规则库中的规则对应表进行匹配,获得所述规范SQL语句的语句类型对应的分组编号和优先级,其中,所述规则对应表包括SQL语句的语句类型对应的分组编号和优先级;
所述合并子单元,用于将所述文件列表的各处理文件中,属于所述匹配子单元确定的同一分组编号的规范SQL语句按照优先级顺序合并到同一SQL脚本中。
8.根据权利要求5所述的装置,其特征在于,所述装置还包括加入单元,其中,
所述加入单元,还用于在所述合并单元合并后的SQL脚本中的每一条SQL 代码后加入执行终止代码。
CN201510998851.4A 2015-12-25 2015-12-25 一种上线结构化查询语言脚本的处理方法及装置 Active CN106919612B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510998851.4A CN106919612B (zh) 2015-12-25 2015-12-25 一种上线结构化查询语言脚本的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510998851.4A CN106919612B (zh) 2015-12-25 2015-12-25 一种上线结构化查询语言脚本的处理方法及装置

Publications (2)

Publication Number Publication Date
CN106919612A CN106919612A (zh) 2017-07-04
CN106919612B true CN106919612B (zh) 2020-10-16

Family

ID=59455724

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510998851.4A Active CN106919612B (zh) 2015-12-25 2015-12-25 一种上线结构化查询语言脚本的处理方法及装置

Country Status (1)

Country Link
CN (1) CN106919612B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107797924B (zh) * 2017-10-12 2020-02-21 中国平安人寿保险股份有限公司 一种sql脚本的异常检测方法及其终端
CN110019517A (zh) * 2017-11-14 2019-07-16 顺丰科技有限公司 一种数据库中间件动态配置方法、系统、设备、存储介质
CN108415991A (zh) * 2018-02-12 2018-08-17 广州市贝聊信息科技有限公司 一种sql审核方法与系统
CN108470002B (zh) * 2018-03-19 2022-05-03 南京邮电大学 一种面向Selenium IDE的XML测试脚本质量评判方法
CN109271315B (zh) * 2018-08-23 2024-05-10 中国平安财产保险股份有限公司 脚本代码检测方法、装置、计算机设备及存储介质
CN109522231A (zh) * 2018-11-15 2019-03-26 上海新炬网络技术有限公司 一种基于Activity的业务故障定位引擎实现方法
CN111078637A (zh) * 2019-10-12 2020-04-28 中国平安财产保险股份有限公司 脚本文件上线方法、装置、计算机设备及存储介质
CN111444208B (zh) * 2020-03-25 2022-08-30 深圳平安医疗健康科技服务有限公司 一种数据更新方法及相关设备
CN112256672B (zh) * 2020-10-22 2023-05-30 中国联合网络通信集团有限公司 数据库变更审批方法及装置
CN113064925A (zh) * 2021-03-15 2021-07-02 深圳依时货拉拉科技有限公司 一种大数据查询方法、系统及计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102831177A (zh) * 2012-07-31 2012-12-19 聚熵信息技术(上海)有限公司 语句纠错方法及其系统
CN102915344A (zh) * 2012-09-25 2013-02-06 新浪网技术(中国)有限公司 一种sql语句处理方法及装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7363299B2 (en) * 2004-11-18 2008-04-22 University Of Washington Computing probabilistic answers to queries
US8818987B2 (en) * 2008-01-11 2014-08-26 International Business Machines Corporation Converting union commands to union all commands
US20110161371A1 (en) * 2009-12-29 2011-06-30 Microgen Plc Sql generation
CN103514166B (zh) * 2012-06-15 2016-09-21 阿里巴巴集团控股有限公司 Sql检查方法与装置
CN102945256B (zh) * 2012-10-18 2016-02-03 福建省海峡信息技术有限公司 海量sql语句合并归类的方法及装置
CN104391995A (zh) * 2014-12-15 2015-03-04 北京趣拿软件科技有限公司 一种sql语句审核的方法、数据库运维的方法及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102831177A (zh) * 2012-07-31 2012-12-19 聚熵信息技术(上海)有限公司 语句纠错方法及其系统
CN102915344A (zh) * 2012-09-25 2013-02-06 新浪网技术(中国)有限公司 一种sql语句处理方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Data-mining based SQL injection attack detection using internal query trees;Mi-YeonKim;《Expert Systems with Applications》;20140302;第41卷(第11期);全文 *
基于Oracle数据库SQL语句优化规则的研究;周锦;《中国优秀硕士学位论文全文数据库 信息科技辑》;20131015(第10期);全文 *

Also Published As

Publication number Publication date
CN106919612A (zh) 2017-07-04

Similar Documents

Publication Publication Date Title
CN106919612B (zh) 一种上线结构化查询语言脚本的处理方法及装置
US11354225B2 (en) Automating identification of test cases for library suggestion models
US11093240B2 (en) Automating identification of code snippets for library suggestion models
US11494181B2 (en) Automating generation of library suggestion engine models
CN106776515B (zh) 数据处理的方法及装置
CN110347598B (zh) 一种测试脚本生成方法、装置、服务器及存储介质
US8434062B2 (en) Enhancing source code debugging and readability using visual symbols
JP5208635B2 (ja) プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム
WO2015176431A1 (zh) 一种测试数据的生成方法及装置
CN109857641B (zh) 对程序源文件进行缺陷检测的方法及装置
Nguyen et al. Detection of embedded code smells in dynamic web applications
KR20150042877A (ko) 레코드 포맷 정보의 관리
US20130125098A1 (en) Transformation of Computer Programs
US20150193213A1 (en) Computer Implemented System and Method for Checking a Program Code
Neukirchen et al. Utilising code smells to detect quality problems in TTCN-3 test suites
CN110609982A (zh) Pdf文件数据解析系统及方法
CN104298603B (zh) 一种应用系统版本构建的正确性的检查方法
Wang et al. A search of Verilog code plagiarism detection method
Kulkarni et al. Generating and analyzing test cases from software requirements using nlp and hadoop
CN111078529A (zh) 客户端写入模块测试方法、装置、电子设备
US8819645B2 (en) Application analysis device
CN115454702A (zh) 日志故障分析方法、装置、存储介质及电子设备
Lavoie et al. A case study of TTCN-3 test scripts clone analysis in an industrial telecommunication setting
CA3148074A1 (en) Text information extracting method, device, computer equipment and storage medium
CN117573140B (zh) 一种通过扫描代码生成文档的方法、系统及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20210701

Address after: No. 19, Jiefang East Road, Hangzhou, Zhejiang Province, 310016

Patentee after: China Mobile Group Zhejiang Co.,Ltd.

Address before: No. 19, Jiefang East Road, Hangzhou, Zhejiang Province, 310016

Patentee before: China Mobile Group Zhejiang Co.,Ltd.

Patentee before: SHANGHAI NEW CENTURY NETWORK Co.,Ltd.

TR01 Transfer of patent right