CN111949684A - Sql语句的执行方法、装置、设备和存储介质 - Google Patents

Sql语句的执行方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN111949684A
CN111949684A CN202010785598.5A CN202010785598A CN111949684A CN 111949684 A CN111949684 A CN 111949684A CN 202010785598 A CN202010785598 A CN 202010785598A CN 111949684 A CN111949684 A CN 111949684A
Authority
CN
China
Prior art keywords
function
sql statement
symbol table
target
executed
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.)
Granted
Application number
CN202010785598.5A
Other languages
English (en)
Other versions
CN111949684B (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.)
Shanghai Dameng Database Co Ltd
Original Assignee
Shanghai Dameng Database 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 Dameng Database Co Ltd filed Critical Shanghai Dameng Database Co Ltd
Priority to CN202010785598.5A priority Critical patent/CN111949684B/zh
Publication of CN111949684A publication Critical patent/CN111949684A/zh
Application granted granted Critical
Publication of CN111949684B publication Critical patent/CN111949684B/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
    • 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/245Query processing
    • G06F16/2455Query execution
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请涉及一种SQL语句的执行方法、装置、设备和存储介质。该方法包括:获取待执行SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;执行所述子方法执行计划,以完成所述待执行SQL语句的执行。该方法由于待执行SQL语句中可以包含with函数调用,且能够通过调用执行该with函数对应的子方法执行计划来完成待执行SQL语句的执行,从而实现了数据库支持with函数功能。

Description

SQL语句的执行方法、装置、设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种SQL语句的执行方法、装置、设备和存储介质。
背景技术
在日常工作中,数据库是存储数据不可或缺的工具。人们可以利用数据库实现对重要数据的存储,并可以从数据库中查询自身所需的数据。
在数据库中,可以使用with子句定义公用表表达式(Common Table Expression,CTE)。其中,CTE是在一个查询中定义的临时命名结果集,将在数据库查询语句中的from子句中使用,其功能类似于派生表。但是,对于大部分数据库来说,还不支持使用with子句定义一个临时命名的with函数。由于with函数不仅具有with子句定义临时命名对象的所有特性,还具有自定义函数不具有的特性,因此,对于本领域技术人员来说,如何实现数据库支持with函数功能是亟待解决的技术问题。
发明内容
基于此,本申请实施例提供一种SQL语句的执行方法、装置、设备和存储介质,能够实现数据库的with函数功能。
第一方面,本申请实施例提供一种SQL语句的执行方法,包括:
获取待执行SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;
确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;
执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
第二方面,本申请实施例提供一种SQL语句的执行装置,包括:
获取模块,用于获取待执行SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;
调用模块,用于确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;
执行模块,用于执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
第三方面,本申请实施例提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现本申请实施例第一方面提供的SQL语句的执行方法的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现本申请实施例第一方面提供的SQL语句的执行方法的步骤。
本申请实施例提供的SQL语句的执行方法、装置、设备和存储介质,在获取到待执行SQL语句中所调用的目标with函数的标识之后,计算机设备确定整个SQL语句块对应的根方法执行计划,并调用与目标with函数的标识对应的子方法执行计划,执行该子方法执行计划,以完成对待执行SQL语句的执行。由于待执行SQL语句中可以包含with函数调用,且能够通过调用执行该with函数对应的子方法执行计划来完成待执行SQL语句的执行,从而实现了数据库支持with函数功能。
附图说明
图1为本申请实施例提供的SQL语句的执行方法的一种流程示意图;
图2为本申请实施例提供的SQL语句的执行方法的另一种流程示意图;
图3为本申请实施例提供的SQL语句的执行方法的又一种流程示意图;
图4为本申请实施例提供的SQL语句的执行装置的内部结构示意图;
图5为本申请实施例提供的一种计算机设备的内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,通过下述实施例并结合附图,对本申请实施例中的技术方案进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。
需要说明的是,下述方法实施例的执行主体可以是SQL语句的执行装置,该装置可以通过软件、硬件或者软硬件结合的方式实现成为计算机设备的部分或者全部。下述方法实施例以执行主体是计算机设备为例进行说明。
图1为本申请实施例提供的SQL语句的执行方法的一种流程示意图。本实施例涉及的是计算机设备如何执行含有with函数调用的待执行SQL语句的具体过程。如图1所示,该方法包括:
S101、获取待执行SQL语句中所调用的目标with函数的标识。
其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息。待执行结构化查询语言(Structured Query Language,SQL)语句为当前需要执行的SQL语句,目标with函数为该待执行SQL语句所调用的with函数。在实际应用中,为了减少SQL语句的冗余度和复杂度,以及提高SQL语句的可读性,可以通过with子句来定义一个临时命名的函数,即with函数不会存在数据库中,仅在当前SQL语句中有效。这样,后续便可以调用所定义的with函数,且一旦定义后可以多次调用。
示例性的,假设数据库存在表对象T(LENGTH INT,WIDTH INT),计算机设备获取的用户输入的待执行SQL语句可以如下:
WITH FUNCTION F1(VAL INT)
RETURN INT IS
BEGIN
RETURN VAL*2;
END;
SELECT F1(LENGTH)+F1(WIDTH)FROM T;
从上述待执行SQL语句可以看出,待执行SQL语句通过with子句定义了一个临时命名的函数“F1”。同时,待执行SQL语句中所调用的目标with函数也为F1,且待执行SQL语句可以多次调用目标with函数“F1”。可以理解的是,单条SQL语句也可以理解为一个语句块。
上述目标with函数的标识包括目标with函数在整个SQL语句块中的层级的描述信息。可选的,该目标with函数的标识中可以包括目标with函数的层次号。
需要理解的是,with函数是新引入的概念,with函数一般与查询SQL语句一起使用,with函数在常规SQL语句的基础上引入了层次号的概念,层次号初值为0。当SQL语句中包含定义的with函数,且在解析with函数的定义体时,with函数的层次号等于所属SQL语句的层次号与1之和。当with函数的定义体中再次定义子with函数时,则子with函数的层次号逐层递增。层次号相同的with函数可能存在多个,不同SQL语句中定义的with函数也可能层次号和名称都相同,为了唯一标识with函数,可以为with函数添加序号,在with函数的层次号相同时,with函数的序号从0开始递增。因此,with函数的唯一标识包括with函数的层次号和with函数的序号。
示例性的,语句如下:
WITH FUNCTION F1(VAL INT)--定义WITH函数F1
RETURN INT IS
BEGIN
RETURN VAL*2;
END;
FUNCTION F2(LENGTH INT,WIDTH INT)--定义WITH函数F2
RETURN INT IS
BEGIN
RETURN F1(LENGTH)+F1(WIDTH);--F2调用F1
END;
FUNCTION F3(VAL INT)--定义WITH函数F3
RETURN INT IS
BEGIN
IF VAL<=0THEN RETURN 0;END IF;
RETURN VAL+F3(VAL-1);--F3自引用
END;
FUNCTION F4(VAL INT)--定义WITH函数F4
RETURN INT IS
A INT:=1;
B INT;
BEGIN
WITH FUNCTION F4_1(VAL INT)--F4定义嵌套WITH函数F4_1
RETURN INT IS
BEGIN
RETURN VAL+A;
END;
SELECT F4_1(VAL)INTO B FROM DUAL;
RETURN B;
END;
SELECT F2(LENGTH,WIDTH),F3(LENGTH),F4(WIDTH)FROM T;
以上述示例说明,待执行SQL语句为“SELECT F2(LENGTH,WIDTH),F3(LENGTH),F4(WIDTH)FROM T;”,假设该待执行SQL语句的层次号为0,with函数“F1”的层次号等于所属SQL语句的层次号与1之和,因此with函数F1的层次号为1且序号为0;同理,with函数“F2”、“F3”、“F4”的层次号为1,序号逐次递增,即with函数“F2”、“F3”、“F4”的序号依次为1、2、3。F1在F2之前定义,则F2具有F1的访问权限;反之,不具有访问权限。with函数F4中嵌套定义了with函数F4_1,其中,非with函数的目标SQL语句的符号表的层次号与其父层符号表的层次号保持一致,且在上述例子中,目标SQL语句“SELECT F4_1(VAL)INTO B FROM DUAL;”为非with函数,其父层符号表为with函数F4的符号表,因此,该目标SQL语句的层次号与with函数F4的层次号保持一致,均为1。另外,with函数F4_1的层次号等于with函数F4_1所属的目标SQL语句层次号与1之和,由于with函数F4_1所属的目标SQL语句层次号为1,因此with函数F4_1的层次号为2且序号为0。
S102、确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划。
其中,所述子方法执行计划与所述根方法执行计划相关。执行计划可以理解为一条SQL语句在数据库中实际执行时对应的执行操作步骤,其是根据逻辑方法生成的物理运行环境的执行指令。另外,方法对应一个语句块,用于存储对应语句块的运行环境信息。逻辑方法是指方法的逻辑运行环境。这样,计算机设备在获取到用户输入的整个SQL语句块后,会生成该整个SQL语句块对应的整个执行计划。可以理解的是,整个SQL语句块对应的根方法执行计划为整个执行计划中的执行计划入口。由于待执行SQL语句中存在目标with函数调用,因此,上述整个执行计划中包括调用该目标with函数的调用计划,调用计划中包含目标with函数的唯一标识(即目标with函数的层次号和序号),基于该目标with函数的唯一标识从当前的方法执行计划开始查找唯一标识相同的子方法执行计划,若当前方法执行计划的唯一标识与目标with函数的唯一标识不同,则根据方法执行计划的父子关系向父层查找该子方法执行计划,一定可以定位到与目标with函数唯一标识相同的子方法执行计划。若当前的方法执行计划不是需要查找的目标with函数对应的方法执行计划,则该目标with函数的方法执行计划有且仅有可能是其父层的方法执行计划,这是由符号表间的访问权限决定的。定位到所述目标with函数的方法执行计划后,执行对应方法执行计划完成SQL语句调用。
当然,计算机设备需要结合整个SQL语句块预先生成各个with函数对应的子方法执行计划,同时,每个子方法执行计划的标识与对应的with函数的标识相匹配。这样,在得到目标with函数的标识之后,计算机设备便可以基于该标识查找到该目标with函数对应的子方法执行计划,从而调用该子方法执行计划。示例性的,with函数的标识的结构为层级_序号,那么该with函数对应的子方法执行计划的标识也为层级_序号。假设目标with函数的标识为2_1,则该目标with函数对应的子方法执行计划的标识也为2_1,这样,计算机设备便可以根据标识“2_1”调用该目标with函数对应的子方法执行计划。
S103、执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
其中,计算机设备执行目标with函数对应的子方法执行计划,并返回执行结果,基于执行结果继续执行其它未执行的方法执行计划,从而完成待执行SQL语句的执行。
示例性的,假设数据库中存在表对象SC(ID INT,SCORE INT),以及假设计算机设备获取的整个SQL语句块如下:
Figure BDA0002621848520000081
在上述例子中,F1为目标with函数,查询语句中含有目标with函数调用。这样,计算机设备从整个SQL语句块对应的根方法执行计划开始执行,当执行到待执行SQL语句对应的执行计划时,便调用与目标with函数“F1”的唯一标识对应的子方法执行计划,并执行该子方法执行计划,从而得到目标with函数调用“F1(SCORE)”的运行结果。
本申请实施例提供的SQL语句的执行方法,在获取到待执行SQL语句中所调用的目标with函数的标识之后,计算机设备确定整个SQL语句块对应的根方法执行计划,并调用与目标with函数的标识对应的子方法执行计划,执行该子方法执行计划,以完成对待执行SQL语句的执行。由于待执行SQL语句中可以包含with函数调用,且能够通过调用执行该with函数对应的子方法执行计划来完成待执行SQL语句的执行,从而实现了数据库支持with函数功能。
在一个实施例中,还提供了一种对待执行SQL语句进行语义解析的过程。在上述实施例的基础上,可选的,如图2所示,在上述S101之前,该方法还可以包括:
S201、构建所述整个SQL语句块对应的根符号表。
其中,根符号表为针对整个SQL语句块所创建的第一个符号表。每个过程化SQL语句块(DECLARE…BEGIN…END)、插入语句(INSERT)、删除语句(DELETE)、更新语句(UPDATE)、查询语句(SELECT)等各种类型的SQL语句以及with子句定义的临时命名对象都有独立构造的符号表,其用来记录各自访问对象的信息。继续以上述S103中的例子为例,上述语句块构建的第一个符号表即根符号表为DECLARE(声明)部分对应的符号表,该根符号表存储了两个变量LEVEL_1和LEVEL_2,以及两个变量的类型和具体取值。同时,该根符号表也是作为该语句块的第一层符号表,即作为针对该语句块后续所构建的符号表的父层符号表。
S202、以所述根符号表作为下一层符号表的父层符号表,递归向下逐层解析所述整个SQL语句块中的每条SQL语句。
其中,每条SQL语句对应不同的符号表,且符号表用于存储对应SQL语句所访问的对象的信息。符号表之间存在父子关系,上一层符号表对于本层的with函数的定义体来说,本层with函数的符号表仅具有上一层符号表中的变量、参数以及with临时命名对象的访问权限,不具有上一层符号表中的已登记的数据库对象(如:表、视图等)的访问权限。with函数所属的SQL语句对于with函数来说,with函数仅具有所属的SQL语句中with临时命名对象的访问权限,然而,with函数对于其所属的SQL语句来说,其所属的SQL语句具有with函数的访问权限。同时,过程化SQL语句块可以包含变量声明和多条SQL语句。单条SQL语句中可以包含with子句和子查询SQL语句,子查询SQL语句中又可以包含with子句和子查询SQL语句,符号表间的父子关系可以有效反映了整个SQL语句块中的各个SQL语句的组成关系。
在解析本层SQL语句时,以上一层SQL语句对应的符号表作为父层符号表(P_SYM),将解析过程中所构建的本层SQL语句对应的符号表(即本层符号表)作为P_SYM的孩子,通过本层符号表对本层SQL语句进行解析。另外,在解析本层SQL语句时,若在该本层SQL语句的本层符号表中查找不到指定对象时,可根据本层符号表逐层查找上一层符号表,直到查找到整个SQL语句块的根符号表,若根符号表中仍不存在该指定对象,则再从数据库中进行查找。也就是说,目标with函数的对象的优先级高于数据库中所创建的同名对象。
继续以上述S103中的例子为例,DECLARE部分解析完毕之后,在解析本层SQL语句(本层SQL语句为SELECT语句)时,构建SELECT语句对应的符号表,并将根符号表作为该SELECT语句对应的符号表的父层符号表,通过该SELECT语句对应的符号表对该SELECT语句进行语义解析。在解析到该SELECT语句中的with子句时,构建with函数(F1)对应的符号表,并将SELECT语句对应的符号表作为with函数对应的符号表的父层符号表,通过with函数对应的符号表对with子句定义的with函数进行语义解析。即按照上述过程,逐层构建各个SQL语句对应的符号表,并基于符号表之间的父子关系和符号表之间的访问权限对每条SQL语句进行语义解析。
其中,符号表之间的访问权限是指:在不同层的情况下,子层符号表中的临时命名对象具有父层符号表中的临时命名对象的访问权限,反之,父层符号表中的临时命名对象不具有子层符号表中的临时命名对象的访问权限。对于单条SQL语句中定义的临时命名对象,后定义的临时命名对象具有先定义的临时命名对象的访问权限,反之,先定义的临时命名对象不具有后定义的临时命名对象的访问权限。
示例性的,语句如下:
DECLARE
LEVEL_1INT:=60;
LEVEL_2INT:=90;
BEGIN
WITH FUNCTION F1(VAL INT)--定义WITH函数F1
RETURN INT IS
BEGIN
RETURN LEVEL_1-VAL;
END;
SELECT F1(WIDTH)FROM T;
WITH FUNCTION F1(VAL INT)--定义WITH函数F1
RETURN INT IS
BEGIN
RETURN LEVEL_2-VAL;
END;
SELECT F1(LENGTH)FROM T;
END;
在上述例子中,SQL语句块中包含两条查询SQL语句,每条查询SQL语句中都定义了with函数。由于DECLARE语句和两条查询SQL语句为非with函数,因此,所创建的DECLARE语句和两条查询SQL语句的符号表的层次号保持一致,均为0(假设层次号的初始值为0)。在解析其中一条查询SQL语句“SELECT F1(WIDTH)FROM T;”时,由于该查询SQL语句包含with函数“F1”,因此,该with函数的层次号等于该查询SQL语句的层次号与1之和,即该with函数的层次号为1,序号为0。在解析另一条查询SQL语句“SELECT F1(LENGTH)FROM T;”时,包含同名的with函数“F1”,该查询SQL语句中的with函数“F1”的层次号等于该查询SQL语句的层次号与1之和,即该同名的with函数的层次号也为1,其序号在上一个with函数的序号基础上递增,即该同名的with函数的序号为1,也就是说,该查询SQL语句访问的with函数“F1”的唯一标识为层次号“1”且序号“1”。
上述示例中,两个同名的with函数F1的层次号均为1,序号递增依次为0和1。根据符号表之间的访问权限规则,这两个with函数所属的查询SQL语句具有这两个with函数中对应的with函数的访问权限。
可选的,待执行SQL语句中可以包括目标with函数的定义体,即在待执行SQL语句中可以通过with子句定义一个临时命名的目标with函数。进一步地,目标with函数的定义体中还可以包括子with函数的定义体,另外,子with函数可以与目标with函数相同,即该数据库不仅支持with函数的嵌套定义,还可以支持with函数的自引用。当然,在嵌套定义或者自引用时,需要重点关注递归结束条件,否则容易出现死循环或者嵌套层次过深的问题。
示例性的,SQL语句如下:
WITH FUNCTION F1(VAL INT)--定义WITH函数F1
RETURN INT IS
BEGIN
RETURN VAL*2;
END;
FUNCTION F2(LENGTH INT,WIDTH INT)--定义WITH函数F2
RETURN INT IS
BEGIN
RETURN F1(LENGTH)+F1(WIDTH);--F2调用F1
END;
FUNCTION F3(VAL INT)--定义WITH函数F3
RETURN INT IS
BEGIN
IF VAL<=0THEN RETURN 0;END IF;
RETURN VAL+F3(VAL-1);--F3自引用
END;
FUNCTION F4(VAL INT)--定义WITH函数F4
RETURN INT IS
A INT:=1;
B INT;
BEGIN
WITH FUNCTION F4_1(VAL INT)--F4定义嵌套WITH函数F4_1
RETURN INT IS
BEGIN
RETURN VAL+A;
END;
SELECT F4_1(VAL)INTO B FROM DUAL;
RETURN B;
END;
SELECT F2(LENGTH,WIDTH),F3(LENGTH),F4(WIDTH)FROM T;
上述例子示出了with函数的嵌套定义以及自引用,从上述例子可知,定义的with函数“F3”中包含with函数的自引用,定义的with函数“F4”中嵌套定义了with函数“F4_1”。
进一步的,可选的,解析待执行SQL语句的过程可以包括:构建所述待执行SQL语句的符号表;根据所述待执行SQL语句的符号表,先解析所述目标with函数的定义体,再解析所述待执行SQL语句中的其它组成部分。否则,若先解析待执行SQL语句中的函数调用,由于目标with函数的定义体尚未解析,则容易导致函数调用解析报错,或者错误的查找数据库所创建的自定义函数导致解析报错。
继续以上述S103中的例子为例,在解析SELECT语句时,先解析SELECT语句中定义的with子句(即目标with函数的定义体),待with子句解析成功之后,再解析SELECT语句中的其它组成部分,比如函数调用、表对象、学生标识(ID)等。
在上述实施例的基础上,可选的,解析目标with函数的定义体的过程可以为:构建所述目标with函数的本层符号表,并将所述本层符号表作为所述待执行SQL语句的符号表的子符号表;根据所述本层符号表中存储的对象的信息,解析所述目标with函数的定义体。
其中,目标with函数的定义体的语义解析依赖于符号表之间的访问权限。即所述目标with函数的定义体具有所述本层符号表中已登记的对象的访问权限,以及具有从所述本层符号表递归查找上一层符号表直到根符号表中已登记的对象的访问权限。其中,已登记的对象可以包括变量、参数以及with函数定义的临时命名对象等。反之,在解析所述待执行SQL语句中的其它组成部分时,所述待执行SQL语句不具有所述目标with函数的本层符号表中已登记的对象的访问权限。
另外,为了表示该目标with函数与待执行SQL语句的归属关系,在解析所述目标with函数的定义体时,还可以创建所述目标with函数的对象,并将该对象添加到所述目标with函数的父层符号表的with函数对象数组中,所述目标with函数的父层符号表为所述待执行SQL语句的符号表。这样,待执行SQL语句便具有其with函数对象数组中的各个对象的访问权限。
继续以下述SQL语句块为例,介绍目标with函数的定义体的解析过程:
Figure BDA0002621848520000151
在解析SELECT语句中定义的with子句时,构建该目标with函数(F1)的定义体对应的本层符号表,并将该本层符号表指向SELECT语句对应的符号表,即SELECT语句对应的符号表作为该目标with函数的定义体对应的符号表的父层符号表。在解析“WITH FUNCTIONF1(VAL INT)RETURN VARCHAR(30)IS V_STR VARCHAR(30)”时,将参数“VAL”以及变量“V_STR”存储到本层符号表中,继续向下解析,在解析“IF VAL<LEVEL_1THEN”时,首先在本层符号表中查找“VAL”,由于本层符号表中存储有“VAL”,因此,“IF VAL<”语义解析成功,继续解析“LEVEL_1THEN”,在本层符号表中查找“LEVEL_1”,未找到,则在父层符号表中进行查找(即在SELECT语句对应的符号表中进行查找),未找到,继续在祖先符号表(在该例子中即在根符号表中进行查找),由于祖先符号表中存储了变量“LEVEL_1”,因此,该SQL语句“VAL<LEVEL_1THEN”语义解析成功。参照上述过程,继续对目标with函数的定义体中的其它SQL语句进行语义解析。
可选的,目标with函数的对象的优先级高于数据库中所创建的同名对象。例如,在完成上述SELECT语句中的with子句的解析之后,在解析SELECT语句中的函数调用时,优先在SELECT语句对应的符号表中查找该函数调用对象,若在SELECT语句对应的符号表中未查找到该函数调用对象,则向SELECT语句对应的符号表的上一层符号表逐层查找该函数调用对象,直到查找到根符号表,若在根符号表中仍未查找到该函数调用对象,则再从数据库中已创建对象中查找。
另外,在构建所述目标with函数的本层符号表时,目标with函数的本层符号表的层次号等于所述待执行SQL语句的符号表的层次号与1之和;当目标with函数的定义体中包括子with函数的定义体时,所述子with函数的符号表的层次号相对所述目标with函数的符号表的层次号逐层递增。
在构建非with函数的目标SQL语句的符号表时(例如构建待执行SQL语句的符号表时),非with函数的目标SQL语句的符号表的层次号与所述目标SQL语句的父层符号表的层次号相一致。在本实施例中,计算机设备在解析待执行SQL语句时,构建所述待执行SQL语句的符号表,并根据所述待执行SQL语句的符号表,优先解析目标with函数的定义体,再解析待执行SQL语句中的其它组成部分;同时,在解析目标with函数的定义体时,可以构建目标with函数的定义体的本层符号表,并基于符号表之间的访问权限以及父子关系,对目标with函数的定义体进行语义解析;以及在解析过程中,目标with函数的对象的优先级高于数据库中所创建的同名对象。通过上述解析手段,使得包含目标with函数的定义体以及目标with函数调用的待执行SQL语句能够实现语义解析过程,从而进一步实现了数据库支持with函数功能。
在一个实施例中,还提供了一种构造with函数对应的子方法执行计划的具体过程。在上述实施例的基础上,可选的,如图3所示,在待执行SQL语句语义解析成功之后,该方法还包括:
S301、创建所述整个SQL语句块中的各个with函数的逻辑方法。
其中,整个SQL语句块的逻辑方法包括根逻辑方法以及各个with函数形成的逻辑方法(with函数的逻辑方法作为根逻辑方法的子方法)。每个with函数的逻辑方法中包含了参数个数、参数类型、返回值类型、定义体语句信息等,以及所述逻辑方法的唯一标识(即逻辑方法的层次号和序号)。所述逻辑方法的层次号等于所述目标with函数的本层符号表的层次号(即,所述目标with函数的父层符号表的层次号与1之和),所述逻辑方法的序号与所述目标with函数的父层逻辑方法的子逻辑方法数组中的当前已登记的子逻辑方法个数相关,序号从预设的初始值(如初始值为0)开始。
S302、构建所述整个SQL语句块的逻辑方法的父子关系。
其中,为整个SQL语句块创建根符号表时,同时创建根逻辑方法,根逻辑方法的层次号等于根符号表的层次号,即为初始值0。与符号表类似,逻辑方法也有父层逻辑方法,父层逻辑方法是指从本层符号表向上层符号表逐层查找,定位到的第一个为逻辑方法创建的符号表所对应的逻辑方法。将当前逻辑方法添加到父层逻辑方法的子逻辑方法数组中,并设置当前逻辑方法的父层逻辑方法指针,则父逻辑方法和子逻辑方法可以双向定位到对方,其中,该子逻辑方法为当前逻辑方法。以上述with函数的嵌套定义的例子为例,with函数“F4”中嵌套定义了with函数“F4_1”,则with函数“F4_1”的逻辑方法的父层逻辑方法为with函数“F4”的逻辑方法。
S303、按照所述整个SQL语句块对应的各个符号表之间的父子关系,从所述根符号表开始,逐层定位各层符号表中登记的with函数,为每个登记的with函数的逻辑方法生成子方法执行计划,并基于所述逻辑方法的父子关系,将所述子方法执行计划存储到父方法执行计划的子方法执行计划数组中,其中,所述父方法执行计划为上一层逻辑方法对应的方法执行计划。
其中,由于在对目标with函数的定义体进行语义解析过程中,可以在目标with函数对应的父层符号表中添加一个with函数对象数组,用于存储待执行SQL语句中定义的目标with函数的对象。因此,若整个SQL语句块的SQL语句中包含有with函数的定义体,则该SQL语句对应的符号表的with函数对象数组中会存储有与其存在归属关系的with函数的信息。
这样,在为with函数的逻辑方法生成子方法执行计划时,计算机设备便可以按照整个SQL语句块对应的各个符号表之间的父子关系,从根符号表开始,逐层定位各层符号表中登记的with函数。
假设根逻辑方法的层次号为0层级,则根逻辑方法的下一层子逻辑方法的层次号为1层级,以此类推,计算机设备便可以得到整个SQL语句块的所有逻辑方法的层次号。其中,子方法(这里的子方法指的是with函数的逻辑方法)的层次号等于其所属SQL语句符号表层次号与1之和。即,符号表的层次仅用于标识子方法的层次,嵌套定义子方法时,子方法的层次号递增。可以理解的是,子逻辑方法的层次号也可以为父层逻辑方法的层次号与1之和。
因此,计算机设备便可以从根符号表开始,根据符号表的父子关系定位到整个SQL语句块涉及到的所有with函数,生成各层符号表中登记的各个with函数对应的逻辑方法的子方法执行计划,并将该子方法执行计划存储到对应的父方法执行计划的子执行计划数组中。with函数如果对应层次号中可能包含多个with函数,且这多个with函数同名,因此需要对with函数对应的逻辑方法进行编号,通过层次号和序号唯一标识一个逻辑方法,故而计算机设备可以根据各个已登记的with函数的逻辑方法的层次号以及序号,生成各个已登记的with函数对应的子方法执行计划。也就是说,具有相同层次号的各个已登记的with函数对应的子方法执行计划可以通过不同的序号进行区分。
另外,子方法执行计划中包含变量信息、参数信息、语句信息等对应指令,以及子方法的唯一标识(即子方法的层次号和序号)。子方法执行计划中访问的变量、参数等对应执行指令中都包含层次号,当with函数嵌套定义时,定位到指定子方法执行计划,并从中取出对应的值参与当前计算。待执行SQL语句的执行计划中包含目标with函数的调用计划,with函数调用的调用计划中包含被调用的目标with函数的层次号和序号,以及对应的目标with函数的参数指令和返回值指令等。同时,生成的方法执行计划中也存在父子关系,这样,计算机设备便可以根据当前方法的执行计划以及子方法执行计划的层次号和序号定位到相应的子方法执行计划。示例性的,以下述SQL语句块为例,介绍with函数对应的子方法执行计划的生成过程:
WITH FUNCTION F1(VAL INT)
RETURN INT IS
BEGIN
RETURN VAL*2;
END;
SELECT F1(LENGTH)+F1(WIDTH)FROM T;
上述例子中的单条SQL语句,该SQL语句块可以看作为特殊只包含单条SQL语句的特殊语句块,创建特殊语句块的根符号表和根逻辑方法,一开始根符号表中没有登记对象,根逻辑方法中也没有登记子逻辑方法。SELECT语句中定义了with函数“F1”,首先,需要创建该with函数“F1”的逻辑方法,该逻辑方法的层次号为F1所属的SELECT语句的层次号与1之和,假设SELECT语句的层次号为0,则该with函数“F1”的逻辑方法的层次号为1,with函数“F1”的父层逻辑方法是根逻辑方法,由于根逻辑方法的子逻辑方法数组中当前已登记的子逻辑方法的个数为0,因此该with函数“F1”的逻辑方法的序号为0。with函数“F1”的逻辑方法创建成功后,添加到父层逻辑方法(此实施例是指根逻辑方法)的子逻辑方法数组中,并设置子逻辑方法的父层逻辑方法指针,则父逻辑方法和子逻辑方法可以双向定位到对方。进一步的,按照SQL语句块对应的各个符号表之间的父子关系,从根符号表开始,可以逐层定位各层符号表中登记的with函数。同理,从根逻辑方法可以逐层定位到SQL语句块中创建的所有子逻辑方法。在该例子中,计算机设备根据with函数“F1”的逻辑方法的层次号和序号,为with函数“F1”的逻辑方法生成对应的子方法执行计划,并将该子方法执行计划存储到父方法执行计划(此实施例是指根方法执行计划)的子方法执行计划数组中。
在本实施例中,计算机设备可以按照所述整个SQL语句块对应的各个符号表之间的父子关系,从所述根符号表开始,逐层定位各层符号表中登记的with函数,以及为每个登记的with函数的逻辑方法生成子方法执行计划,并基于所述逻辑方法的父子关系,将所述子方法执行计划存储到父方法执行计划的子方法执行计划数组中,这样,在待执行SQL语句中包含目标with函数调用时,计算机设备仅通过调用该目标with函数对应的子方法执行计划即可实现相应的功能,从而简化了待执行SQL语句的冗余度和复杂度,提高了待执行SQL语句的可读性。
图4为本申请实施例提供的SQL语句的执行装置的内部结构示意图,如图4所示,该装置可以包括:获取模块10、调用模块11和执行模块12。
具体的,获取模块10用于获取待执行SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;
调用模块11用于确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;
执行模块12用于执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
本申请实施例提供的SQL语句的执行装置,在获取到待执行SQL语句中所调用的目标with函数的标识之后,计算机设备确定整个SQL语句块对应的根方法执行计划,并调用与目标with函数的标识对应的子方法执行计划,执行该子方法执行计划,以完成对待执行SQL语句的执行。由于待执行SQL语句中可以包含with函数调用,且能够通过调用执行该with函数对应的子方法执行计划来完成待执行SQL语句的执行,从而实现了数据库支持with函数功能。
在上述实施例的基础上,可选的,该装置还包括:构建模块和解析模块;
具体的,构建模块用于在获取模块10获取待执行SQL语句中所调用的目标with函数的标识之前,构建所述整个SQL语句块对应的根符号表;
解析模块用于以所述根符号表作为下一层符号表的父层符号表,递归向下逐层解析所述整个SQL语句块中的每条SQL语句,其中,每条SQL语句对应不同的符号表,且符号表用于存储对应SQL语句所访问的对象的信息。
在上述实施例的基础上,可选的,当所述待执行SQL语句中包括所述目标with函数的定义体时,解析模块具体用于构建所述待执行SQL语句的符号表;根据所述待执行SQL语句的符号表,先解析所述目标with函数的定义体,再解析所述待执行SQL语句中的其它组成部分。
在上述实施例的基础上,可选的,解析模块具体用于构建所述目标with函数的本层符号表,并将所述本层符号表作为待执行SQL语句的符号表的子符号表;根据所述本层符号表中存储的对象的信息,解析所述目标with函数的定义体;其中,所述目标with函数的定义体具有所述本层符号表中已登记的对象的访问权限,以及具有从所述本层符号表递归查找上一层符号表直到根符号表中已登记的对象的访问权限。
可选的,在解析所述待执行SQL语句中的其它组成部分时,所述待执行SQL语句不具有所述目标with函数的本层符号表中已登记的对象的访问权限。
可选的,所述目标with函数的本层符号表的层次号等于所述待执行SQL语句的符号表的层次号与1之和;非with函数的目标SQL语句的符号表的层次号与所述目标SQL语句的父层符号表的层次号相一致;当目标with函数的定义体中包括子with函数的定义体时,所述子with函数的符号表的层次号相对所述目标with函数的符号表的层次号逐层递增。
可选的,解析模块还用于创建所述目标with函数的对象,并将该对象添加到所述目标with函数的父层符号表的with函数对象数组中,所述目标with函数的父层符号表为所述待执行SQL语句的符号表。
可选的,所述目标with函数的对象的优先级高于数据库中所创建的同名对象。
在上述实施例的基础上,可选的,该装置还包括:逻辑方法创建模块、父子关系构建模块和子方法执行计划生成模块;
具体的,逻辑方法创建模块用于创建所述整个SQL语句块中的各个with函数的逻辑方法;
父子关系构建模块用于构建所述整个SQL语句块的逻辑方法的父子关系;
子方法执行计划生成模块用于按照所述整个SQL语句块对应的各个符号表之间的父子关系,从所述根符号表开始,逐层定位各层符号表中登记的with函数,为每个登记的with函数的逻辑方法生成子方法执行计划,并基于所述逻辑方法的父子关系,将所述子方法执行计划存储到父方法执行计划的子方法执行计划数组中,其中,所述父方法执行计划为上一层逻辑方法对应的方法执行计划。
在一个实施例中,提供了一种计算机设备,该计算机设备可以为服务器,其内部结构图可以如图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储SQL语句的执行过程中的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种SQL语句的执行方法。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:
获取待执行SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;
确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;
执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:构建所述整个SQL语句块对应的根符号表;以所述根符号表作为下一层符号表的父层符号表,递归向下逐层解析所述整个SQL语句块中的每条SQL语句,其中,每条SQL语句对应不同的符号表,且符号表用于存储对应SQL语句所访问的对象的信息。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:构建所述待执行SQL语句的符号表;根据所述待执行SQL语句的符号表,先解析所述目标with函数的定义体,再解析所述待执行SQL语句中的其它组成部分。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:构建所述目标with函数的本层符号表,并将所述本层符号表作为所述待执行SQL语句的符号表的子符号表;根据所述本层符号表中存储的对象的信息,解析所述目标with函数的定义体;其中,所述目标with函数的定义体具有所述本层符号表中已登记的对象的访问权限,以及具有从所述本层符号表递归查找上一层符号表直到根符号表中已登记的对象的访问权限。
可选的,在解析所述待执行SQL语句中的其它组成部分时,所述待执行SQL语句不具有所述目标with函数的本层符号表中已登记的对象的访问权限。
可选的,所述目标with函数的本层符号表的层次号等于所述待执行SQL语句的符号表的层次号与1之和;非with函数的目标SQL语句的符号表的层次号与所述目标SQL语句的父层符号表的层次号相一致;当目标with函数的定义体中包括子with函数的定义体时,所述子with函数的符号表的层次号相对所述目标with函数的符号表的层次号逐层递增。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:创建所述目标with函数的对象,并将该对象添加到所述目标with函数的父层符号表的with函数对象数组中,所述目标with函数的父层符号表为所述待执行SQL语句的符号表。
可选的,所述目标with函数的对象的优先级高于数据库中所创建的同名对象。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:创建所述整个SQL语句块中的各个with函数的逻辑方法;构建所述整个SQL语句块的逻辑方法的父子关系;按照所述整个SQL语句块对应的各个符号表之间的父子关系,从所述根符号表开始,逐层定位各层符号表中登记的with函数;为每个登记的with函数的逻辑方法生成子方法执行计划,并基于所述逻辑方法的父子关系,将所述子方法执行计划存储到父方法执行计划的子方法执行计划数组中,其中,所述父方法执行计划为上一层逻辑方法对应的方法执行计划。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取待执行SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;
确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;
执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:构建所述整个SQL语句块对应的根符号表;以所述根符号表作为下一层符号表的父层符号表,递归向下逐层解析所述整个SQL语句块中的每条SQL语句,其中,每条SQL语句对应不同的符号表,且符号表用于存储对应SQL语句所访问的对象的信息。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:构建所述待执行SQL语句的符号表;根据所述待执行SQL语句的符号表,先解析所述目标with函数的定义体,再解析所述待执行SQL语句中的其它组成部分。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:构建所述目标with函数的本层符号表,并将所述本层符号表作为所述待执行SQL语句的符号表的子符号表;根据所述本层符号表中存储的对象的信息,解析所述目标with函数的定义体;其中,所述目标with函数的定义体具有所述本层符号表中已登记的对象的访问权限,以及具有从所述本层符号表递归查找上一层符号表直到根符号表中已登记的对象的访问权限。
可选的,在解析所述待执行SQL语句中的其它组成部分时,所述待执行SQL语句不具有所述目标with函数的本层符号表中已登记的对象的访问权限。
可选的,所述目标with函数的本层符号表的层次号等于所述待执行SQL语句的符号表的层次号与1之和;非with函数的目标SQL语句的符号表的层次号与所述目标SQL语句的父层符号表的层次号相一致;当目标with函数的定义体中包括子with函数的定义体时,所述子with函数的符号表的层次号相对所述目标with函数的符号表的层次号逐层递增。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:创建所述目标with函数的对象,并将该对象添加到所述目标with函数的父层符号表的with函数对象数组中,所述目标with函数的父层符号表为所述待执行SQL语句的符号表。
可选的,所述目标with函数的对象的优先级高于数据库中所创建的同名对象。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:创建所述整个SQL语句块中的各个with函数的逻辑方法;构建所述整个SQL语句块的逻辑方法的父子关系;按照所述整个SQL语句块对应的各个符号表之间的父子关系,从所述根符号表开始,逐层定位各层符号表中登记的with函数;为每个登记的with函数的逻辑方法生成子方法执行计划,并基于所述逻辑方法的父子关系,将所述子方法执行计划存储到父方法执行计划的子方法执行计划数组中,其中,所述父方法执行计划为上一层逻辑方法对应的方法执行计划。
上述实施例中提供的SQL语句的执行装置、计算机设备以及存储介质可执行本申请任意实施例所提供的SQL语句的执行方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的SQL语句的执行方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

Claims (12)

1.一种SQL语句的执行方法,其特征在于,包括:
获取待执行结构化查询语言SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;
确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;
执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
2.根据权利要求1所述的方法,其特征在于,在所述获取待执行SQL语句中所调用的目标with函数的标识之前,所述方法还包括:
构建所述整个SQL语句块对应的根符号表;
以所述根符号表作为下一层符号表的父层符号表,递归向下逐层解析所述整个SQL语句块中的每条SQL语句,其中,每条SQL语句对应不同的符号表,且符号表用于存储对应SQL语句所访问的对象的信息。
3.根据权利要求2所述的方法,其特征在于,当所述待执行SQL语句中包括所述目标with函数的定义体时,解析所述待执行SQL语句,包括:
构建所述待执行SQL语句的符号表;
根据所述待执行SQL语句的符号表,先解析所述目标with函数的定义体,再解析所述待执行SQL语句中的其它组成部分。
4.根据权利要求3所述的方法,其特征在于,所述解析所述目标with函数的定义体,包括:
构建所述目标with函数的本层符号表,并将所述本层符号表作为所述待执行SQL语句的符号表的子符号表;
根据所述本层符号表中存储的对象的信息,解析所述目标with函数的定义体;
其中,所述目标with函数的定义体具有所述本层符号表中已登记的对象的访问权限,以及具有从所述本层符号表递归查找上一层符号表直到根符号表中已登记的对象的访问权限。
5.根据权利要求4所述的方法,其特征在于,在解析所述待执行SQL语句中的其它组成部分时,所述待执行SQL语句不具有所述目标with函数的本层符号表中已登记的对象的访问权限。
6.根据权利要求4所述的方法,其特征在于,所述目标with函数的本层符号表的层次号等于所述待执行SQL语句的符号表的层次号与1之和;
非with函数的目标SQL语句的符号表的层次号与所述目标SQL语句的父层符号表的层次号相一致;
当目标with函数的定义体中包括子with函数的定义体时,所述子with函数的符号表的层次号相对所述目标with函数的符号表的层次号逐层递增。
7.根据权利要求4所述的方法,其特征在于,还包括:创建所述目标with函数的对象,并将该对象添加到所述目标with函数的父层符号表的with函数对象数组中,所述目标with函数的父层符号表为所述待执行SQL语句的符号表。
8.根据权利要求7所述的方法,其特征在于,所述目标with函数的对象的优先级高于数据库中所创建的同名对象。
9.根据权利要求7所述的方法,其特征在于,还包括:
创建所述整个SQL语句块中的各个with函数的逻辑方法;
构建所述整个SQL语句块的逻辑方法的父子关系;
按照所述整个SQL语句块对应的各个符号表之间的父子关系,从所述根符号表开始,逐层定位各层符号表中登记的with函数,为每个登记的with函数的逻辑方法生成子方法执行计划,并基于所述逻辑方法的父子关系,将所述子方法执行计划存储到父方法执行计划的子方法执行计划数组中,其中,所述父方法执行计划为上一层逻辑方法对应的方法执行计划。
10.一种SQL语句的执行装置,其特征在于,包括:
获取模块,用于获取待执行SQL语句中所调用的目标with函数的标识,其中,所述标识包括所述目标with函数在整个SQL语句块中的层级的描述信息;
调用模块,用于确定所述整个SQL语句块对应的根方法执行计划,并调用与所述标识对应的子方法执行计划,其中,所述子方法执行计划与所述根方法执行计划相关;
执行模块,用于执行所述子方法执行计划,以完成所述待执行SQL语句的执行。
11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述方法的步骤。
CN202010785598.5A 2020-08-06 2020-08-06 Sql语句的执行方法、装置、设备和存储介质 Active CN111949684B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010785598.5A CN111949684B (zh) 2020-08-06 2020-08-06 Sql语句的执行方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010785598.5A CN111949684B (zh) 2020-08-06 2020-08-06 Sql语句的执行方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN111949684A true CN111949684A (zh) 2020-11-17
CN111949684B CN111949684B (zh) 2023-08-11

Family

ID=73331717

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010785598.5A Active CN111949684B (zh) 2020-08-06 2020-08-06 Sql语句的执行方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN111949684B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116010438A (zh) * 2022-12-22 2023-04-25 北京柏睿数据技术股份有限公司 一种数据库操作延迟计算的方法和系统

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030041052A1 (en) * 2001-08-22 2003-02-27 International Business Machines Corporation Tool for converting SQL queries into portable ODBC
US20090030883A1 (en) * 2007-07-27 2009-01-29 Oracle International Corporation Techniques for Extending User-Defined Indexes with Auxiliary Properties
US20120005190A1 (en) * 2010-05-14 2012-01-05 Sap Ag Performing complex operations in a database using a semantic layer
CN102693269A (zh) * 2011-03-04 2012-09-26 微软公司 用于消费信息提取服务的可扩展表面
CN104123288A (zh) * 2013-04-24 2014-10-29 阿里巴巴集团控股有限公司 一种数据查询方法及装置
CN106407302A (zh) * 2016-08-30 2017-02-15 东华大学 支持通过简单sql调用中间件数据库特有功能的方法
CN108431805A (zh) * 2015-10-23 2018-08-21 甲骨文国际公司 并行执行具有递归子句的查询
CN108959454A (zh) * 2018-06-15 2018-12-07 上海达梦数据库有限公司 一种提示子句指定方法、装置、设备及存储介质
CN108984612A (zh) * 2018-06-12 2018-12-11 中国平安人寿保险股份有限公司 目标sql语句的获取方法、装置、计算机设备及存储介质
CN109656950A (zh) * 2018-12-12 2019-04-19 上海达梦数据库有限公司 递归查询方法、装置、服务器及存储介质
CN111026782A (zh) * 2019-12-25 2020-04-17 上海达梦数据库有限公司 远程数据库对象的优化方法、装置、设备及存储介质

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030041052A1 (en) * 2001-08-22 2003-02-27 International Business Machines Corporation Tool for converting SQL queries into portable ODBC
US20090030883A1 (en) * 2007-07-27 2009-01-29 Oracle International Corporation Techniques for Extending User-Defined Indexes with Auxiliary Properties
US20120005190A1 (en) * 2010-05-14 2012-01-05 Sap Ag Performing complex operations in a database using a semantic layer
CN102693269A (zh) * 2011-03-04 2012-09-26 微软公司 用于消费信息提取服务的可扩展表面
CN104123288A (zh) * 2013-04-24 2014-10-29 阿里巴巴集团控股有限公司 一种数据查询方法及装置
CN108431805A (zh) * 2015-10-23 2018-08-21 甲骨文国际公司 并行执行具有递归子句的查询
CN106407302A (zh) * 2016-08-30 2017-02-15 东华大学 支持通过简单sql调用中间件数据库特有功能的方法
CN108984612A (zh) * 2018-06-12 2018-12-11 中国平安人寿保险股份有限公司 目标sql语句的获取方法、装置、计算机设备及存储介质
CN108959454A (zh) * 2018-06-15 2018-12-07 上海达梦数据库有限公司 一种提示子句指定方法、装置、设备及存储介质
CN109656950A (zh) * 2018-12-12 2019-04-19 上海达梦数据库有限公司 递归查询方法、装置、服务器及存储介质
CN111026782A (zh) * 2019-12-25 2020-04-17 上海达梦数据库有限公司 远程数据库对象的优化方法、装置、设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
EGO-BAI: "Python中with的用法", Retrieved from the Internet <URL:https://blog.csdn.net/Ego_Bai/article/details/80873242> *
故事写在心里: "SQL中 with函数的详解与用法", Retrieved from the Internet <URL:https://blog.csdn.net/weixin_46163590/article/details/106013896> *
龚泽平: "公用表表达式在审计数据采集分析中的应用", 财会学习 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116010438A (zh) * 2022-12-22 2023-04-25 北京柏睿数据技术股份有限公司 一种数据库操作延迟计算的方法和系统
CN116010438B (zh) * 2022-12-22 2023-11-28 北京柏睿数据技术股份有限公司 一种数据库操作延迟计算的方法和系统

Also Published As

Publication number Publication date
CN111949684B (zh) 2023-08-11

Similar Documents

Publication Publication Date Title
CN107463632B (zh) 一种分布式NewSQL数据库系统和数据查询方法
CN104967620B (zh) 一种基于属性访问控制策略的访问控制方法
CN110795455B (zh) 依赖关系解析方法、电子装置、计算机设备及可读存储介质
CN112650766B (zh) 数据库数据操作的方法、系统及服务器
WO2019206211A1 (zh) 权限管理方法及装置
CN112579602A (zh) 多版本数据存储方法、装置、计算机设备及存储介质
CN112883030A (zh) 数据收集方法、装置、计算机设备和存储介质
CN109299101B (zh) 数据检索方法、装置、服务器和存储介质
CN111813803B (zh) 语句块执行计划的生成方法、装置、设备和存储介质
CN110502532A (zh) 远程数据库对象的优化方法、装置、设备和存储介质
CN111949684A (zh) Sql语句的执行方法、装置、设备和存储介质
CN109213775B (zh) 搜索方法、装置、计算机设备和存储介质
CN115269631A (zh) 数据查询方法、数据查询系统、设备及存储介质
CN108549688B (zh) 一种数据操作的优化方法、装置、设备和存储介质
US20210165903A1 (en) System and method for data security grading
Liu et al. Core role-based access control: Efficient implementations by transformations
CN111966704A (zh) Orm框架实现方法、系统、计算机设备和存储介质
WO2023030461A1 (zh) 一种分布式数据库检测方法及装置
CN115114325B (zh) 数据查询方法、装置、电子设备以及存储介质
CN112416966B (zh) 即席查询方法、装置、计算机设备和存储介质
CN110704437B (zh) 数据库查询语句的修改方法、装置、设备和存储介质
CN114090719A (zh) 一种基于ast的抽象语义拆解分析方法、装置及电子设备
CN114201525B (zh) 查询数据的方法及装置
CN110263055B (zh) 一种参数提示方法、装置、设备和存储介质
CN116010438B (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