技术新讯 > 计算推算,计数设备的制造及其应用技术 > 一种利用游标表达式进行嵌套游标查询的方法及系统与流程  >  正文

一种利用游标表达式进行嵌套游标查询的方法及系统与流程

  • 国知局
  • 2024-08-05 12:14:04

本发明涉及电数字数据处理,尤其涉及一种利用游标表达式进行嵌套游标查询的方法及系统。

背景技术:

1、游标表达式(cursor expression)是结构化查询语言(sql)中的一种语法形式,它的语法形式为cursor(…),括号中的内容为子查询语句,使用cursor关键字后接小括号的结构来生成一个游标变量,游标表达式可以作为查询语句的投影列或作为函数的参数使用。在结构化查询语言中存在很多种形式的表达式,例如数字表达式,字符表达式,函数表达式等等,这些表达式统称为结构化查询语言表达式。现有技术对于结构化查询语言表达式的处理方式,通常有以下几个步骤:

2、1、语法分析阶段:解析sql语句结构,以确保其符合语法规则。

3、2、语译分析阶段:进一步分析查询中涉及的数据对象,例如表、列、数据类型、约束条件等,以及查询的语义含义。这个阶段主要关注查询的语义是否正确,例如查询的列是否存在于数据库中、列与表之间的关系是否正确、约束条件是否满足等。

4、3、结构化查询语言表达式生成阶段:将不同种类的表达式生成为结构化查询语言表达式,以便于之后的优化模块和执行器进行操作。对于游标表达式来讲,通常由其括号中的子查询语句生成一个查询控制块(control block),然后将这个查询控制块发送给结构化查询语言表达式,就生成了游标表达式的结构化查询语言表达式,之后的操作就基于此结构化查询语言表达式来进行。

5、4、优化阶段:优化模块会考虑多种因素,包括索引、连接类型、排序方式等,尝试找到最有效的执行计划,以便在执行查询时减少资源消耗并提高性能。

6、5、执行阶段:执行模块根据不同的结构化查询语言表达式进行不同的执行计划并生成执行结果,根据查询表中数据行数,每有一行数据便执行一次执行计划,然后将所有执行结果发送给客户端,根据客户端返回的指令进行下一步操作,直到接收到客户端发送的结束指令后,执行阶段完成。

7、现有处理方法存在如下缺陷:第一,游标表达式括号中的子查询语句在结构化查询语言表达式生成阶段就被转化为查询控制块,所以在执行阶段是由同一个查询控制块对主查询进行的查询操作。当此主查询语句单独作为一条sql进行执行时是没有问题的,但是当此主查询作为游标被打开时,它的投影列中是游标表达式,执行后生成的游标变量存在不独立的问题。因为这些游标变量是由同一个查询控制块对主查询进行查询操作生成的,所以相互之间存在依赖关系,不能同时对这些游标变量进行独立的嵌套游标查询,只能一个一个地分别查询。

8、第二,优化阶段会对查询控制块进行优化操作,同样的,由游标表达式括号中的子查询语句生成的查询控制块在优化阶段也会被优化。此优化行为会将子查询中与主查询相关的关联查询一同进行优化,但是由于游标表达式生成的游标变量需要在之后的阶段用于对主查询的嵌套游标查询,因此这种优化行为存在一定风险,当查询条件比较复杂的情况时有可能将与主查询相关的一些信息优化消失,导致嵌套游标查询失败。为了避免这种风险,还需要进一步针对游标表达式括号中子查询生成的查询控制块对优化模块进行对应的调整。

技术实现思路

1、本发明所要解决的技术问题是提供一种利用游标表达式进行嵌套游标查询的方法及系统,首先将游标表达式中的子查询语句定义为泛化的查询块,使优化模块无法识别,并暂时将游标表达式保存,直到执行阶段再将其取出转化成查询控制块,再通过优化模块进行优化,再通过游标变量生成模块生成多个独立的游标变量后传输给客户端,由客户端对其进行嵌套游标查询操作,避免了在优化阶段将游标表达式中子查询与主查询相关的信息被优化消失的风险,无需针对游标表达式对优化模块进行额外的调整,并且可以保证生成的游标变量都是独立存在的,可以在后续操作中进行独立的嵌套游标查询。

2、本发明是通过以下技术方案予以实现:

3、一种利用游标表达式进行嵌套游标查询的方法,其包括如下步骤:

4、s1:语法分析阶段:语法分析模块在查询语句的投影列或函数参数位置识别到游标cursor关键字及子查询语句,将子查询语句识别为泛化的查询块,将游标cursor关键字及泛化的查询块整体识别为游标表达式,并将游标表达式发送给存储模块;

5、s2:存储阶段:存储模块将游标表达式进行存储,并将存储的地址信息发送给结构化查询语言表达式生成模块;

6、s3:结构化查询语言表达式生成阶段:结构化查询语言表达式生成模块将存储的地址信息转化为结构化查询语言表达式,并将结构化查询语言表达式发送给执行模块;

7、s4:执行阶段:执行模块根据结构化查询语言表达式所提供的地址信息从存储模块中提取出游标表达式,将游标表达式中的泛化的查询块转化成查询控制块并传输给优化模块;

8、s5:优化阶段:优化模块将查询控制块优化得到优化查询控制块后传输给游标变量生成模块;

9、s6:游标变量生成阶段:游标变量生成模块根据优化查询控制块、查询对象的数据行数以及每一行的列信息生成多个独立的游标变量,并将相应的多个独立的游标变量发送给客户端;

10、s7:查询阶段:客户端根据相应的多个独立的游标变量进行嵌套游标查询。

11、进一步,查询阶段后还包括清理阶段,客户端完成嵌套游标查询后将信息反馈给游标变量生成模块及存储模块,游标变量生成模块释放所有游标变量,存储模块清除所有游标表达式的存储数据。

12、进一步,游标变量生成模块根据查询对象中数据行数,每存在一行数据执行一次步骤s4至步骤s6,最终生成与查询对象中数据行数对应数量的多个独立的游标变量发送给客户端。

13、进一步,语法分析阶段后还包括语译分析阶段,语法分析模块将游标表达式发送给语译分析模块,语译分析模块分析游标表达式中泛化的查询块所涉及的数据对象、数据类型及约束条件是否正确,若正确则进入下一阶段操作,若不正确则停止操作。

14、一种利用游标表达式进行嵌套游标查询的系统,用以执行上述任一项所述的一种利用游标表达式进行嵌套游标查询的方法,其包括语法分析模块、存储模块、结构化查询语言表达式生成模块、执行模块、优化模块、游标变量生成模块及客户端;

15、所述语法分析模块用于识别游标cursor关键字及子查询语句,将子查询语句识别为泛化的查询块,将游标cursor关键字及泛化的查询块整体识别为游标表达式,并将游标表达式发送给存储模块;

16、所述存储模块用于将游标表达式进行存储,并将存储的地址信息发送给结构化查询语言表达式生成模块;

17、所述结构化查询语言表达式生成模块用于将存储的地址信息转化为结构化查询语言表达式,并将结构化查询语言表达式发送给执行模块;

18、所述执行模块用于根据结构化查询语言表达式所提供的地址信息从存储模块中提取出游标表达式,将游标表达式中的泛化的查询块转化成查询控制块传输给优化模块;

19、所述优化模块用于将查询控制块优化得到优化查询控制块后传输给游标变量生成模块;

20、所述游标变量生成模块根据优化查询控制块、查询对象的数据行数以及每一行的列信息生成多个独立的游标变量,并将相应的多个独立的游标变量发送给客户端;

21、所述客户端用于根据相应的游标变量进行嵌套游标查询。

22、进一步,一种利用游标表达式进行嵌套游标查询的系统,还包括语译分析模块,所述语译分析模块用于分析游标表达式中泛化的查询块所涉及的数据对象、数据类型及约束条件是否正确,若正确则进入下一阶段操作,若不正确则停止操作。

23、发明的有益效果:

24、本发明由于游标表达式括号中的子查询语句在语法分析阶段识别为泛化的查询块后将游标表达式进行存储,而且在执行阶段与游标变量生成阶段之间进行优化,由于此时正在执行对查询对象的查询操作,所以生成的查询控制块中会包含查询对象的相关信息,在优化过程中就不会把子查询中与查询对象相关的信息优化掉,查询结果准确可靠,并且后期无需针对游标表达式对优化模块进行额外的调整;

25、另外由于本发明在执行阶段,根据游标表达式生成的结构化查询语言表达式中提供的存储位置信息获得泛化的查询块,将此查询块转化为查询控制块,然后优化此查询控制块,对查询对象进行查询操作,生成一个游标变量,查询对象的表中每有一行便会执行一次此执行操作,因此可以保证对每一行的数据生成的游标变量都是独立存在的,可以在后续操作中进行独立的嵌套游标查询,查询效率比较高。

本文地址:https://www.jishuxx.com/zhuanli/20240802/261700.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。