一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

转换PLSQL代码的方法、装置、电子设备及存储介质与流程

2022-07-31 06:49:07 来源:中国专利 TAG:

转换plsql代码的方法、装置、电子设备及存储介质
技术领域
1.本发明属于人工智能技术领域,尤其涉及一种转换plsql代码的方法、装置、电子设备及存储介质。


背景技术:

2.对于数据存储方案,当前很多公司的业务均是采用了oracle,其中,oracle提供了package,可以很方便地组织业务逻辑,但是这种面向数据库的业务逻辑很难跟上业务的发展。因此,往往需要让oracle回归数据存储,将业务逻辑从package中抽离出来,并翻译成其他语言。
3.目前,oracle的翻译方案主要包括如下两种:
4.第一,采用人工翻译,这种方式的好处是可以对老代码进行重构,缺点是工作量太大,耗时耗力,这对很多业务特别是功能逻辑很重的业务来说是不现实的。
5.第二,采用机器自动翻译,普遍采用字符串匹配的方式,这种方式适合对结构简单的plsql语句进行逐句翻译,难以处理复杂的上下文关系,翻译出来的代码比较僵硬,不符合开发的代码习惯。并且,对于不同场景类型的plsql代码,很难针对性地进行转换处理。


技术实现要素:

6.以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
7.本发明实施例提供了一种转换plsql代码的方法、装置、电子设备及存储介质,不仅能够实现自动翻译,而且还能够使得目标代码更符合编码习惯,代码可读性大大提高,还能够针对不同的场景类型针对性地进行转换处理。
8.第一方面,本发明实施例提供了一种转换plsql代码的方法,包括:获取待转换的plsql代码文本,其中,所述plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exitwhen语句对象;对所述plsql代码文本进行翻译处理,生成与所述plsql代码文本对应的语法树,其中,所述语法树包括有与所述loop循环块语句对象对应的loopstmt节点、与所述cursor循环fetch语句对象对应的fetch stmt节点、以及与所述exit when语句对象对应的exit stmt节点;对所述语法树中的节点进行遍历,并获取所述语法树中所述loop stmt节点、所述fetch stmt节点和所述exit stmt节点之间的节点位置顺序;根据所述节点位置顺序对所述plsql代码文本进行识别处理,得到所述plsql代码文本的场景类型;根据所述场景类型对所述plsql代码文本进行转换处理,得到目标代码文本。
9.在一些实施例中,所述对所述语法树中的节点进行遍历,并获取所述语法树中所述loop stmt节点、所述fetch stmt节点和所述exit stmt节点之间的节点位置顺序,包括:对所述语法树中的节点进行遍历,确定所述语法树的节点位置顺序为:所述loop stmt节点的第一个子节点为所述fetch stmt节点,并且所述loop stmt节点的第二个子节点为所述exit stmt节点。
10.在一些实施例中,所述根据所述节点位置顺序对所述plsql代码文本进行识别处理,得到所述plsql代码文本的场景类型,包括:在所述节点位置顺序为所述loop stmt节点的第一个子节点为所述fetch stmt节点,并且所述loop stmt节点的第二个子节点为所述exit stmt节点的情况下,对所述plsql代码文本进行识别处理以得到所述plsql代码文本的场景类型为:所述cursor循环fetch语句对象和所述exit when语句对象均位于所述loop循环块语句对象中。
11.在一些实施例中,所述根据所述场景类型对所述plsql代码文本进行转换处理,得到目标代码文本,包括:在对所述plsql代码文本进行转换处理的过程中,将所述loop循环块语句对象转换为while循环块语句对象,并且将cursor是否还有下一条数据作为所述while循环块语句对象的进入条件,以及删除所述exit when语句对象。
12.在一些实施例中,所述对所述语法树中的节点进行遍历,并获取所述语法树中所述loop stmt节点、所述fetch stmt节点和所述exit stmt节点之间的节点位置顺序,包括:对所述语法树中的节点进行遍历,确定所述语法树的节点位置顺序为:所述loop stmt节点的第一个子节点为所述exit stmt节点,并且所述fetch stmt节点位于所述loop stmt节点之前。
13.在一些实施例中,所述根据所述节点位置顺序对所述plsql代码文本进行识别处理,得到所述plsql代码文本的场景类型,包括:在所述节点位置顺序为所述loop stmt节点的第一个子节点为所述exit stmt节点,并且所述fetch stmt节点位于所述loop stmt节点之前的情况下,对所述plsql代码文本进行识别处理以得到所述plsql代码文本的场景类型为:所述cursor循环fetch语句对象位于所述loop循环块语句对象之前,并且所述exit when语句对象均位于所述loop循环块语句对象中。
14.在一些实施例中,所述根据所述场景类型对所述plsql代码文本进行转换处理,得到目标代码文本,包括:在对所述plsql代码文本进行转换处理的过程中,将所述loop循环块语句对象转换为while循环块语句对象,并且将是否发现cursor数据作为所述while循环块语句对象的进入条件,以及删除所述exit when语句对象。
15.第二方面,本发明实施例还提供了一种转换plsql代码的装置,包括:获取单元,用于获取待转换的plsql代码文本,其中,所述plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象;翻译单元,用于对所述plsql代码文本进行翻译处理,生成与所述plsql代码文本对应的语法树,其中,所述语法树包括有与所述loop循环块语句对象对应的loop stmt节点、与所述cursor循环fetch语句对象对应的fetch stmt节点、以及与所述exit when语句对象对应的exit stmt节点;遍历单元,用于对所述语法树中的节点进行遍历,并获取所述语法树中所述loop stmt节点、所述fetch stmt节点和所述exit stmt节点之间的节点位置顺序;识别单元,用于根据所述节点位置顺序对所述plsql代码文本进行识别处理,得到所述plsql代码文本的场景类型;转换单元,用于根据所述场景类型对所述plsql代码文本进行转换处理,得到目标代码文本。
16.第三方面,本发明实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述第一方面所述的转换plsql代码的方法。
17.第四方面,本发明实施例还提供了一种计算机可读存储介质,存储有计算机可执
行指令,所述计算机可执行指令用于执行如上述第一方面所述的转换plsql代码的方法。
18.本发明实施例包括:首先,获取待转换的plsql代码文本,其中,所述plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象;然后,对所述plsql代码文本进行翻译处理,生成与所述plsql代码文本对应的语法树,其中,所述语法树包括有与所述loop循环块语句对象对应的loop stmt节点、与所述cursor循环fetch语句对象对应的fetch stmt节点、以及与所述exit when语句对象对应的exit stmt节点;接着,对所述语法树中的节点进行遍历,并获取所述语法树中所述loop stmt节点、所述fetch stmt节点和所述exit stmt节点之间的节点位置顺序;接着,根据所述节点位置顺序对所述plsql代码文本进行识别处理,得到所述plsql代码文本的场景类型;最后,根据所述场景类型对所述plsql代码文本进行转换处理,得到目标代码文本。根据本发明实施例的技术方案,首先,本发明实施例能够实现携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象的plsql代码文本的自动翻译;而且基于语法树的上下文关系能够使得目标代码更符合编码习惯,代码可读性大大提高;而且还能够基于语法树的节点位置顺序确定plsql代码文本的场景类型,针对不同的场景类型针对性地进行转换处理。
19.本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
20.附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
21.图1是本发明一个实施例提供的转换plsql代码的方法的流程图;
22.图2是图1中步骤s300的一个实施例的流程图;
23.图3是图1中步骤s400的一个实施例的流程图;
24.图4是图1中步骤s500的一个实施例的流程图;
25.图5是图1中步骤s300的另一个实施例的流程图;
26.图6是图1中步骤s400的另一个实施例的流程图;
27.图7是图1中步骤s500的另一个实施例的流程图;
28.图8是本发明一个实施例提供的在第一种场景类型下的语法树结构示意图;
29.图9是本发明一个实施例提供的在第二种场景类型下的语法树结构示意图;
30.图10是本发明一个实施例提供的转换plsql代码的装置的结构示意图;
31.图11是本发明一个实施例提供的电子设备的硬件结构示意图。
具体实施方式
32.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
33.需要说明的是,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示
出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
34.除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
35.首先,对本发明中涉及的若干名词进行解析:
36.人工智能(artificial intelligence,ai):是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学;人工智能是计算机科学的一个分支,人工智能企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能可以对人的意识、思维的信息过程的模拟。人工智能还是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
37.自然语言处理(natural language processing,nlp):nlp用计算机来处理、理解以及运用人类语言(如中文、英文等),nlp属于人工智能的一个分支,是计算机科学与语言学的交叉学科,又常被称为计算语言学。自然语言处理包括语法分析、语义分析、篇章理解等。自然语言处理常用于机器翻译、手写体和印刷体字符识别、语音识别及文语转换、信息检索、信息抽取与过滤、文本分类与聚类、舆情分析和观点挖掘等技术领域,它涉及与语言处理相关的数据挖掘、机器学习、知识获取、知识工程、人工智能研究和与语言计算相关的语言学研究等。
38.信息抽取(information extraction,ner):从自然语言文本中抽取指定类型的实体、关系、事件等事实信息,并形成结构化数据输出的文本处理技术。信息抽取是从文本数据中抽取特定信息的一种技术。文本数据是由一些具体的单位构成的,例如句子、段落、篇章,文本信息正是由一些小的具体的单位构成的,例如字、词、词组、句子、段落或是这些具体的单位的组合。抽取文本数据中的名词短语、人名、地名等都是文本信息抽取,当然,文本信息抽取技术所抽取的信息可以是各种类型的信息。
39.plsql(procedural language/sql):是一种程序语言,叫做过程化sql语言。plsql是oracle数据库对sql语句的扩展。在普通sql语句的使用上增加了编程语言的特点,所以plsql把数据操作和查询语句组织在plsql代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。具体地,plsql属于第三代语言,它与c、c 、java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许sql的数据操纵语言和查询语句包含在块结构和代码过程语言中,使plsql成为一个功能强大的事务处理语言。
40.oracle:oracle database,又名oracle rdbms。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。它是一种高效率的、可靠性好的、适应高吞吐量的数据库方案。
41.java:是一门面向对象编程语言,不仅吸收了c 语言的各种优点,还摒弃了c 里难以理解的多继承、指针等概念,因此java语言具有功能强大和简单易用两个特征。java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的
思维方式进行复杂的编程。java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。java可以编写桌面应用程序、web应用程序、分布式系统和嵌入式系统应用程序等。
42.语法树:是句子结构的图形表示,它代表了句子的推导结果,有利于理解句子语法结构的层次。简单说,语法树就是按照某一规则进行推导时所形成的树。
43.目前,对于数据存储方案,当前很多公司的业务均是采用了oracle,其中,oracle提供了package,可以很方便地组织业务逻辑,但是这种面向数据库的业务逻辑很难跟上业务的发展。因此,往往需要让oracle回归数据存储,将业务逻辑从package中抽离出来,并翻译成其他语言。
44.现有技术中,oracle的翻译方案主要包括如下两种:
45.第一,采用人工翻译,这种方式的好处是可以对老代码进行重构,缺点是工作量太大,耗时耗力,这对很多业务特别是功能逻辑很重的业务来说是不现实的。
46.第二,采用机器自动翻译,普遍采用字符串匹配的方式,这种方式适合对结构简单的plsql语句进行逐句翻译,难以处理复杂的上下文关系,翻译出来的代码比较僵硬,不符合开发的代码习惯。当前plsql业务逻辑获取数据常常采用的方法是cursor循环fetch的方法,在loop循环块内,fetchcursor into获取单条数据,当发现cursor%notfound时退出loop。用普通的机器翻译方案,往往是一个while死循环,当发现cursor%notfound时break退出循环。这种翻译逻辑很符合plsql的编码习惯,但往往不符合目标代码。并且,对于不同场景类型的plsql代码,很难针对性地进行转换处理。
47.基于此,本发明实施例提供了一种转换plsql代码的方法、转换plsql代码的装置、电子设备和计算机可读存储介质,首先,获取待转换的plsql代码文本,其中,plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象;然后,对plsql代码文本进行翻译处理,生成与plsql代码文本对应的语法树,其中,语法树包括有与loop循环块语句对象对应的loop stmt节点、与cursor循环fetch语句对象对应的fetch stmt节点、以及与exit when语句对象对应的exit stmt节点;接着,对语法树中的节点进行遍历,并获取语法树中loop stmt节点、fetch stmt节点和exit stmt节点之间的节点位置顺序;接着,根据节点位置顺序对plsql代码文本进行识别处理,得到plsql代码文本的场景类型;最后,根据场景类型对plsql代码文本进行转换处理,得到目标代码文本。根据本发明实施例的技术方案,首先,本发明实施例能够实现携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象的plsql代码文本的自动翻译;而且基于语法树的上下文关系能够使得目标代码更符合编码习惯,代码可读性大大提高;而且还能够基于语法树的节点位置顺序确定plsql代码文本的场景类型,针对不同的场景类型针对性地进行转换处理。
48.本发明实施例提供的转换plsql代码的方法、转换plsql代码的装置、电子设备及计算机可读存储介质,具体通过如下实施例进行说明,首先描述本发明实施例中的转换plsql代码的方法。
49.本发明实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(artificial intelligence,ai)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及
应用系统。
50.人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
51.本发明实施例提供的转换plsql代码的方法,涉及人工智能技术领域。本发明实施例提供的转换plsql代码的方法可应用于终端中,也可应用于服务器端中,还可以是运行于终端或服务器端中的软件。在一些实施例中,终端可以是智能手机、平板电脑、笔记本电脑、台式计算机等;服务器端可以配置成独立的物理服务器,也可以配置成多个物理服务器构成的服务器集群或者分布式系统,还可以配置成提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn以及大数据和人工智能平台等基础云计算服务的云服务器;软件可以是实现转换plsql代码的方法的应用等,但并不局限于以上形式。
52.本发明可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
53.如图1所示,图1是本发明一个实施例提供的转换plsql代码的方法的流程图;本发明实施例的转换plsql代码的方法可以包括但不限于包括步骤s100、步骤s200、步骤s300、步骤s400和步骤s500。
54.步骤s100、获取待转换的plsql代码文本,其中,plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象;
55.步骤s200、对plsql代码文本进行翻译处理,生成与plsql代码文本对应的语法树,其中,语法树包括有与loop循环块语句对象对应的loop stmt节点、与cursor循环fetch语句对象对应的fetch stmt节点、以及与exit when语句对象对应的exit stmt节点;
56.步骤s300、对语法树中的节点进行遍历,并获取语法树中loop stmt节点、fetch stmt节点和exit stmt节点之间的节点位置顺序;
57.步骤s400、根据节点位置顺序对plsql代码文本进行识别处理,得到plsql代码文本的场景类型;
58.步骤s500、根据场景类型对plsql代码文本进行转换处理,得到目标代码文本。
59.具体地,对于携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象的plsql代码文本,首先翻译成语法树,其中,所生成的语法树会包括有与loop循环块语句对象对应的loop stmt节点、与cursor循环fetch语句对象对应的fetch stmt节点、以及与exit when语句对象对应的exit stmt节点;接着,基于语法树中的节点位置顺序推算出plsql代码文本的场景类型,再针对具体的场景类型选择不同的方式进行转
换处理。
60.根据本发明实施例的技术方案,首先,本发明实施例通过上述步骤s100至步骤s500,能够实现携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象的plsql代码文本的自动翻译;其次,本发明实施例基于语法树的上下文关系能够使得目标代码更符合编码习惯,代码可读性大大提高;另外,本发明实施例还能够基于语法树的节点位置顺序确定plsql代码文本的场景类型,针对不同的场景类型针对性地进行转换处理。
61.另外,如图2所示,图2是图1中步骤s300的一个实施例的流程图;关于上述步骤s300中的对语法树中的节点进行遍历,并获取语法树中loop stmt节点、fetch stmt节点和exit stmt节点之间的节点位置顺序,可以包括但不限于包括步骤s311和步骤s312。
62.步骤s311、对语法树中的节点进行遍历;
63.步骤s312、确定语法树的节点位置顺序为:loop stmt节点的第一个子节点为fetch stmt节点,并且loop stmt节点的第二个子节点为exit stmt节点。
64.具体地,由于待转换的plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象,因此所生成的语法树相应会有与loop循环块语句对象对应的loop stmt节点、与cursor循环fetch语句对象对应的fetch stmt节点、以及与exit when语句对象对应的exit stmt节点;本发明实施例可以通过遍历语法树中的节点得到节点位置顺序,当cursor循环fetch语句对象和exit when语句对象均位于loop循环块语句对象中的情况下,所得到的节点位置顺序会是:loop stmt节点的第一个子节点为fetch stmt节点,并且loop stmt节点的第二个子节点为exit stmt节点。
65.另外,如图3所示,图3是图1中步骤s400的一个实施例的流程图;关于上述步骤s400中的根据节点位置顺序对plsql代码文本进行识别处理,得到plsql代码文本的场景类型,可以包括但不限于包括步骤s411和步骤s412。
66.步骤s411、在节点位置顺序为loop stmt节点的第一个子节点为fetch stmt节点,并且loop stmt节点的第二个子节点为exit stmt节点的情况下;
67.步骤s412、对plsql代码文本进行识别处理以得到plsql代码文本的场景类型为:cursor循环fetch语句对象和exit when语句对象均位于loop循环块语句对象中。
68.具体地,当所得到的节点位置顺序为loop stmt节点的第一个子节点为fetch stmt节点,并且loop stmt节点的第二个子节点为exit stmt节点的情况下,可以反推得到plsql代码文本的场景类型为:cursor循环fetch语句对象和exit when语句对象均位于loop循环块语句对象中。
69.另外,如图4所示,图4是图1中步骤s500的一个实施例的流程图;关于上述步骤s500中的根据场景类型对plsql代码文本进行转换处理,得到目标代码文本,可以包括但不限于包括步骤s511和步骤s512。
70.步骤s511、在对plsql代码文本进行转换处理的过程中,将loop循环块语句对象转换为while循环块语句对象;
71.步骤s512、将cursor是否还有下一条数据作为while循环块语句对象的进入条件,以及删除exit when语句对象。
72.具体地,在plsql代码文本的场景类型为:cursor循环fetch语句对象和exit when
语句对象均位于loop循环块语句对象的情况下,在转换处理时,本发明实施例会将loop循环块语句对象转换为while循环块语句对象,同时,将cursor是否还有下一条数据作为while循环块语句对象的进入条件,以及删除exit when语句对象。
73.另外,如图5所示,图5是图1中步骤s300的另一个实施例的流程图;关于上述步骤s300中的对语法树中的节点进行遍历,并获取语法树中loop stmt节点、fetch stmt节点和exit stmt节点之间的节点位置顺序,可以包括但不限于包括步骤s321和步骤s322。
74.步骤s321、对语法树中的节点进行遍历;
75.步骤s322、确定语法树的节点位置顺序为:loop stmt节点的第一个子节点为exit stmt节点,并且fetch stmt节点位于loop stmt节点之前。
76.具体地,由于待转换的plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象,因此所生成的语法树相应会有与loop循环块语句对象对应的loop stmt节点、与cursor循环fetch语句对象对应的fetch stmt节点、以及与exit when语句对象对应的exit stmt节点;本发明实施例可以通过遍历语法树中的节点得到节点位置顺序,当cursor循环fetch语句对象位于loop循环块语句对象之前,并且exit when语句对象均位于loop循环块语句对象的情况下,所得到的节点位置顺序会是:loop stmt节点的第一个子节点为exit stmt节点,并且fetch stmt节点位于loop stmt节点之前。
77.另外,如图6所示,图6是图1中步骤s400的另一个实施例的流程图;关于上述步骤s400中的根据节点位置顺序对plsql代码文本进行识别处理,得到plsql代码文本的场景类型,可以包括但不限于包括步骤s421和步骤s422。
78.步骤s421、在节点位置顺序为loop stmt节点的第一个子节点为exit stmt节点,并且fetch stmt节点位于loop stmt节点之前的情况下;
79.步骤s422、对plsql代码文本进行识别处理以得到plsql代码文本的场景类型为:cursor循环fetch语句对象位于loop循环块语句对象之前,并且exit when语句对象均位于loop循环块语句对象中。
80.具体地,当所得到的节点位置顺序为loop stmt节点的第一个子节点为exit stmt节点,并且fetch stmt节点位于loop stmt节点之前的情况下,可以反推得到plsql代码文本的场景类型为:cursor循环fetch语句对象位于loop循环块语句对象之前,并且exit when语句对象均位于loop循环块语句对象中。
81.另外,如图7所示,图7是图1中步骤s500的另一个实施例的流程图;关于上述步骤s500中的根据场景类型对plsql代码文本进行转换处理,得到目标代码文本,可以包括但不限于包括步骤s521和步骤s522。
82.步骤s521、在对plsql代码文本进行转换处理的过程中,将loop循环块语句对象转换为while循环块语句对象;
83.步骤s522、将是否发现cursor数据作为while循环块语句对象的进入条件,以及删除exit when语句对象。
84.具体地,在plsql代码文本的场景类型为:cursor循环fetch语句对象位于loop循环块语句对象之前,并且exit when语句对象均位于loop循环块语句对象中的情况下,在转换处理时,本发明实施例会将loop循环块语句对象转换为while循环块语句对象,同时,将
是否发现cursor数据作为while循环块语句对象的进入条件,以及删除exit when语句对象。
85.基于上述图2至图7中的方法流程,本发明实施例提供了转换plsql代码文本的具体方案,如下:
86.cursor循环fetch主要包括两种常用场景,下面以这两个场景为例,详细解说本发明实施例是如何进行结构调整以达到代码优化的目的。
87.示例性地,第一种场景类型下的plsql代码文本如下:
[0088][0089]
示例性地,第二种场景类型下的plsql代码文本如下:
[0090][0091]
目标代码以java为例,一般来说,机器逐句翻译后的代码如下:
[0092]
对于第一种场景类型的plsql代码文本,机器逐句翻译后的代码如下:
[0093][0094]
对于第二种场景类型的plsql代码文本,机器逐句翻译后的代码如下:
[0095][0096][0097]
对于上述两种场景下机器逐句翻译后的代码,这种plsql风格的java代码,并不符合java编码习惯。业内基于字符串匹配的翻译方案,将plsql代码逐句翻译到这个地步,就算完成了,要再进一步调整循环结构进行代码优化是非常困难的。
[0098]
对此,本发明实施例利用语法树来进行代码优化,其中,如图8和图9所示,图8是本发明一个实施例提供的在第一种场景类型下的语法树结构示意图;图9是本发明一个实施例提供的在第二种场景类型下的语法树结构示意图。在遍历退出loop stmt节点时,检查该语法树的结构。
[0099]
具体地,如图8所示,如果发现loop stmt第一个子节点是fetch stmt节点(fetch v_cur获取数据),第二个子节点是exit stmt节点(exit when v_cur%notfound退出循环),那么满足第一种场景的代码,在生成loop stmt的目标代码时,将cursor是否还有下一条数据作为循环进入的条件,同时loop代码块去掉exit when树节点的代码(已经没必要存在了,因为退出的判断已经转移到while条件里去判断),得到的目标代码如下所示:
[0100][0101]
另外,如图9所示,如果发现loop stmt第一个子节点是exit stmt节点(exit when v_cur%notfound退出循环),那么此时fetch stmt节点必定是前面已经处理,满足第二种场景的代码,在生成loop stmt的目标代码时,将是否发现cursor数据作为循环进入的条件,同时loop代码块去掉exit when树节点的代码,得到的目标代码如下所示:
[0102]
[0103][0104]
相比机器逐句翻译后的代码,通过本发明实施例调整后的代码明显更合理,符合java代码习惯。本发明实施例基于语法树,针对cursor循环fetch的代码结构进行优化,调整while循环条件,并且在while循环体里去掉原本的exit代码,使得目标代码更符合编码习惯,代码可读性大大提高。
[0105]
请参阅图10,本发明实施例还提供一种plsql代码转换装置,可以实现上述转换plsql代码的方法,该plsql代码转换装置100包括:
[0106]
获取单元110,用于获取待转换的plsql代码文本,其中,plsql代码文本携带有loop循环块语句对象、cursor循环fetch语句对象和exit when语句对象;
[0107]
翻译单元120,用于对plsql代码文本进行翻译处理,生成与plsql代码文本对应的语法树,其中,语法树包括有与loop循环块语句对象对应的loop stmt节点、与cursor循环fetch语句对象对应的fetch stmt节点、以及与exit when语句对象对应的exit stmt节点;
[0108]
遍历单元130,用于对语法树中的节点进行遍历,并获取语法树中loop stmt节点、fetch stmt节点和exit stmt节点之间的节点位置顺序;
[0109]
识别单元140,用于根据节点位置顺序对plsql代码文本进行识别处理,得到plsql代码文本的场景类型;
[0110]
转换单元150,用于根据场景类型对plsql代码文本进行转换处理,得到目标代码文本。
[0111]
该plsql代码转换装置的具体实施方式与上述转换plsql代码的方法的具体实施例基本相同,在此不再赘述。
[0112]
本发明实施例还提供了一种电子设备,电子设备包括:存储器、处理器、存储在存储器上并可在处理器上运行的程序以及用于实现处理器和存储器之间的连接通信的数据总线,程序被处理器执行时实现上述转换plsql代码的方法。该电子设备可以为包括平板电脑、车载电脑等任意智能终端。
[0113]
请参阅图11,图11示意了另一实施例的电子设备的硬件结构,电子设备包括:
[0114]
处理器210,可以采用通用的cpu(centralprocessingunit,中央处理器)、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本发明实施例所提供的技术方案;
[0115]
存储器220,可以采用只读存储器(readonlymemory,rom)、静态存储设备、动态存储设备或者随机存取存储器(randomaccessmemory,ram)等形式实现。存储器220可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器220中,并由处理器210来调用执行本发明实施例的转换plsql代码的方法;
[0116]
输入/输出接口230,用于实现信息输入及输出;
[0117]
通信接口240,用于实现本设备与其他设备的通信交互,可以通过有线方式(例如
usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信;和
[0118]
总线250,在设备的各个组件(例如处理器210、存储器220、输入/输出接口230和通信接口240)之间传输信息;
[0119]
其中处理器210、存储器220、输入/输出接口230和通信接口240通过总线250实现彼此之间在设备内部的通信连接。
[0120]
本发明实施例还提供了一种存储介质,存储介质为计算机可读存储介质,用于计算机可读存储,存储介质存储有一个或者多个程序,一个或者多个程序可被一个或者多个处理器执行,以实现上述转换plsql代码的方法。
[0121]
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0122]
本发明实施例描述的实施例是为了更加清楚的说明本发明实施例的技术方案,并不构成对于本发明实施例提供的技术方案的限定,本领域技术人员可知,随着技术的演变和新应用场景的出现,本发明实施例提供的技术方案对于类似的技术问题,同样适用。
[0123]
本领域技术人员可以理解的是,图1-7中示出的技术方案并不构成对本发明实施例的限定,可以包括比图示更多或更少的步骤,或者组合某些步骤,或者不同的步骤。
[0124]
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0125]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。
[0126]
本发明的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0127]
应当理解,在本发明中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
[0128]
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其
它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,上述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0129]
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0130]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0131]
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括多指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例的方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,简称rom)、随机存取存储器(random access memory,简称ram)、磁碟或者光盘等各种可以存储程序的介质。
[0132]
以上参照附图说明了本发明实施例的优选实施例,并非因此局限本发明实施例的权利范围。本领域技术人员不脱离本发明实施例的范围和实质内所作的任何修改、等同替换和改进,均应在本发明实施例的权利范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献