存储代码转换方法、装置、计算机设备及存储介质与流程

文档序号:33189162发布日期:2023-02-04 07:44阅读:55来源:国知局
存储代码转换方法、装置、计算机设备及存储介质与流程

1.本发明涉及数据存储领域,尤其涉及一种存储代码转换方法、装置、计算机设备及存储介质。


背景技术:

2.随着存储技术的发展,出现了越来越多的商业数据库。在一些需求的推动下,需要将某一类型数据库a中的数据迁移至另一类型的数据库b。由于数据库a和数据库b的类型不同,其存储代码也存在显著差异,导致迁移的工作量巨大。


技术实现要素:

3.基于此,有必要针对上述技术问题,提供一种存储代码转换方法、装置、计算机设备及存储介质,以快速实现存储代码的转换,提高跨类型数据库数据的迁移效率。
4.一种存储代码转换方法,包括:
5.获取第一存储代码;
6.从所述第一存储代码提取待转换的第一数据对象;所述第一数据对象包括第一数据名称、第一类型数据、第一函数、第一运算表达式和第一控制语句;
7.获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象;
8.根据所述第二数据对象生成第二存储代码。
9.一种存储代码转换装置,包括:
10.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时实现上述存储代码转换方法。
11.一个或多个存储有计算机可读指令的可读存储介质,所述计算机可读指令被一个或多个处理器执行时,使得所述一个或多个处理器执行如上述存储代码转换方法。
12.上述存储代码转换方法、装置、计算机设备及存储介质,通过获取第一存储代码,以获取待转换的存储代码。从所述第一存储代码提取待转换的第一数据对象;所述第一数据对象包括第一数据名称、第一数据类型类型数据、第一函数、第一运算表达式和第一控制语句,以将第一存储代码分解为多种第一数据对象,便于数据对象的转换,提高转换效率和转换正确率。获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象,以完成对各个第一数据对象的转换。根据所述第二数据对象生成第二存储代码,以完成对第一存储代码的转换。本发明可以实现自动、快速、准确地将第一存储代码解构为各个第一数据对象,然后通过相应的转化规则完成对第一数据对象的转化,生成第二数据处理对象,最后组装各个第二数据处理对象,生成第二存储代码。本发明可以快速实现存储代码的转换,提高跨类型数据库数据的迁移效率。
附图说明
13.为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
14.图1是本发明一实施例中存储代码转换方法的一应用环境示意图;
15.图2是本发明一实施例中存储代码转换方法的一流程示意图;
16.图3是本发明一实施例中存储代码转换装置的一结构示意图;
17.图4是本发明一实施例中计算机设备的一示意图。
具体实施方式
18.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
19.本实施例提供的存储代码转换方法,可应用在如图1的应用环境中,其中,客户端与服务端进行通信。其中,客户端包括但不限于各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。服务端可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
20.在一实施例中,如图2所示,提供一种存储代码转换方法,以该方法应用在图1中的服务端为例进行说明,包括如下步骤s10-s40。
21.s10、获取第一存储代码。
22.可理解地,第一存储代码指的是待转换的第一数据库的存储代码,如可以是oracle(一种商业数据库)存储代码。第一存储代码可以存储在第一存储目录的第一存储文件中。在一示例中,第一存储文件可以是后缀为sql的oracle文件。
23.s20、从所述第一存储代码提取待转换的第一数据对象;所述第一数据对象包括第一数据名称、第一类型数据、第一函数、第一运算表达式和第一控制语句。
24.可理解地,可以使用与第二存储代码关联的算法导入第一存储代码,并分析第一存储代码的存储结构和存储对象,提取出待转换的第一数据对象。在一示例中,与第二存储代码关联的算法为java算法,则第一数据对象包括第一数据名称、第一类型数据、第一函数、第一运算表达式和第一控制语句。需要将这些第一数据对象转换为符合java算法规范的第二数据对象。
25.其中,第一数据名称包括表名、变量名称、存储过程名称等。第一类型数据包括数字、字符串、数组、日期等。第一函数包括oracle一些功能函数,如abs、add_months、ascii等。第一运算表达式包括括号表达式、and表达式、or表达式等。第一控制语句包括条件if else语句、普调循环语句、游标循环语句等。
26.s30、获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象。
27.可理解地,每一种第一数据对象都有对应的转化规则。可以使用转化规则将第一
数据对象转化为第二数据对象。例如,第一数据名称包含$、#等特殊字符。转化为第二数据名称时,$用一个下划线代替,#用双划线代替。需要注意的是,在此处,变量名需特殊处理,但字段名不能改动。
28.s40、根据所述第二数据对象生成第二存储代码。
29.可理解地,在完成所有第一数据对象的转化之后,可以将所有第二数据对象组成第二数据库的第二存储代码,写入第二存储文件。在一示例中,第二存储文件可以是后缀为java的java文件。在此处,第二数据库为基于java算法构建的数据库。
30.在获得第二存储代码之后,可以对第二存储代码进行数据和功能方面的验证,比较与第一存储代码的差异。若第二存储代码存在错漏,则需要对各个转化规则进一步检查,排查错漏原因。
31.步骤s10-s40中,获取第一存储代码,以获取待转换的存储代码。从所述第一存储代码提取待转换的第一数据对象;所述第一数据对象包括第一数据名称、第一数据类型类型数据、第一函数、第一运算表达式和第一控制语句,以将第一存储代码分解为多种第一数据对象,便于数据对象的转换,提高转换效率和转换正确率。获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象,以完成对各个第一数据对象的转换。根据所述第二数据对象生成第二存储代码,以完成对第一存储代码的转换。本实施例可以实现自动、快速、准确地将第一存储代码解构为各个第一数据对象,然后通过相应的转化规则完成对第一数据对象的转化,生成第二数据处理对象,最后组装各个第二数据处理对象,生成第二存储代码。本实施例快速实现存储代码的转换,提高跨类型数据库数据的迁移效率。
32.可选地,所述第二数据对象包括第二数据名称;
33.步骤s30,即所述获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象,包括:
34.s301、获取与所述第一数据名称对应的名称转化规则;
35.s302、根据所述名称转化规则检测所述第一数据名称是否包含大小写和/或特殊字符;
36.s303、若所述第一数据名称包含大小写和/或特殊字符,根据所述名称转化规则将所述第一数据名称中的大小写和/或特殊字符进行转化,生成第二数据名称。
37.可理解地,第二数据名称包括但不限于表名、变量名称、存储过程名称。在一示例中,oracle对于名称是大小写不敏感,java对大小写敏感。因而,需要检测第一数据名称是否包含大小写,若同一变量名存在大写书写方式和小写书写方式,则需要将它们统一为同一种书写形式。在此处,名称转化规则可以将同一数据名称统一为大写或小写格式。
38.对于$、#等特殊字符,java不支持这两种特殊字符。转化为第二数据名称时,$用一个下划线代替,#用双划线代替。需要注意的是,在此处,变量名需特殊处理,但字段名不能改动。换句话说,名称转化规则只负责对变量名(属于第一数据名称)进行转换,不对字段名(不属于第一数据名称)进行转换。
39.若第一数据名称既不包含大小写,也不包含特殊字符,则不需要对第一数据名称进行转换,也即是,第一数据名称与第二数据名称相同。
40.本实施例可以对第一数据名称进行智能检测,将第一数据名称转换为适用于第二
数据库的第二数据名称。
41.可选地,所述第二数据对象包括第二类型数据;
42.步骤s30,即所述获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象,包括:
43.s311、获取与所述第一类型数据对应的类型转化规则;
44.s312、根据所述类型转化规则对所述第一类型数据进行转化,生成第二类型数据。
45.可理解地,第二类型数据包括数字、字符串、数组、日期等。通常情况下,同一类型数据,在第一数据库的表现形式与在第二数据库的表现形式可能存在差异。因而,需要通过类型转化规则将第一数据库中的第一类型数据进行转换,生成第二类型数据。
46.具体的,对于数据,转java的bigdecimal,范围/精度保留。用bigdecimal,保持和oracle完全一致,不丢精度。数字的预算bigdecimal可以直接使用默认设置的api方法,在此不再赘述。
47.对于字符串,可以转换为java字符串拼接(java string)。这里要处理大量的隐式转换,如数字||数字,date||数字,数字||字符串等等。类型转化规则定义了所有可能的拼接类型,包括左或右任何一方非字符串。转java后,字符串采用明示的连接符连接。
48.对于日期,可以转换为java.util.date对象。涉及日期比较时,则先转化为秒,再进行比较。可采用java.util.date对象默认的操作方法。
49.对于数组,可以转换为java.util.arraylist对象。转化后的java数组对象的所有功能,与原有oracle数组相同。
50.对于表,oracle表可以转换为java的类(class)。所以这个变量类型就是表class对象实例,表字段就是对象的属性。
51.对于自定义结构体,同表一样,也转化为java的类(class)。
52.对于游标(cursor),生成一个对应class,分配连接,执行sql query(查询),清理,关闭连接,转jdbc(java database connectivityjava语言连接数据库)地读取行(fetch row),然后一行一行get,转jdbc的fetch row,然后一个字段赋值给一个变量,判断jdbc结果集状态。
53.本实施例可以将第一类型数据转换为适用于第二数据库的第二类型数据。
54.可选地,所述第二数据对象包括第二函数;
55.步骤s30,即所述获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象,包括:
56.s321、获取与所述第一函数对应的函数转化规则;
57.s322、根据所述函数转化规则对所述第一函数进行转化,生成所述第二函数。
58.可理解地,可以自定义第二函数(使用第二数据库)实现第一函数(使用第一数据库)的功能。每一第一函数都有对应的第二函数。在此处,函数转化规则记录有两种函数之间的关联关系。通过函数转化规则,可以实现第一函数和第二函数之间的转换。
59.在一示例中,函数转化规则记录有如下函数关联关系:
[0060][0061][0062]
本实施例通过自定义的第二函数实现第一函数的功能,确保了在第二数据库也可以实现第一函数的功能。
[0063]
可选地,所述第二数据对象包括第二运算表达式;
[0064]
步骤s30,即所述获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象,包括:
[0065]
s331、获取与所述第一运算表达式对应的运算表达式转化规则;
[0066]
s332、根据所述运算表达式转化规则对所述第一运算表达式进行转化,生成所述第二运算表达式。
[0067]
可理解地,在第一数据库中,存在多种第一运算表达式,可以为每一第一运算表达式设置相应的运算表达式转化规则,使第一运算表达式转化为第二运算表达式。
[0068]
例如,第一运算表达式为括号表达式,则第二运算表示式中只需添加括号即可;第一运算表达式为and表达式,则第二运算表示式中用&&表示;第一运算表达式为or表达式,则第二运算表示式中用&&表示;第一运算表达式为and表达式,则第二运算表示式中用||表示;第一运算表达式为not表达式,则第二运算表示式中用!表示;第一运算表达式为in表达式,则第二运算表示式中用arrays.aslist({}).contains({})表示;第一运算表达式为like表达式,则第二运算表示式中用正则表达式表示;第一运算表达式为case when then表达式,则第二运算表示式中用if,elseif,else表示;第一运算表达式为函数、存储过程调
用表达式,则识别并转为第二运算表达式(java函数调用表达式),出参转为全局变量调用,把全局变量值赋值给调用方参数,如果出参同为入参,则先将调用方参数值赋值给全局变量。
[0069]
本实施例通过运算表达式转化规则,可以将第一运算表达式转换为适用于第二数据库的第二运算表达式。
[0070]
可选地,所述第二数据对象包括第二控制语句;
[0071]
步骤s30,即所述获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象,包括:
[0072]
s341、获取与所述第一控制语句对应的控制语句转化规则;
[0073]
s342、根据所述控制语句转化规则对所述第一控制语句进行转化,生成所述第二控制语句。
[0074]
可理解地,在第一数据库中,存在多种第一控制语句,可以为每一第一控制语句设置相应的控制语句转化规则,使第一控制语句转化为第二控制语句。
[0075]
例如,第一控制语句为if else语句,则第二控制语句表示为if/else if/else。第一控制语句为普调循环语句时,若该循环语句表示为loop

end loop

,则第二控制语句可以表示为while(true){...};若该循环语句表示为for x in lower..upper loop

end loop,则第二控制语句可以表示为for(x=lower;x《=upper;++x)。
[0076]
若第一控制语句为游标循环语句,则第二控制语句可以模拟服务器调用(如jdbc)执行选择操作。第二控制语句包括如下步骤:
[0077]
第1步、record declaration code;定义一个游标resultset结构;
[0078]
第2步、open_cursor();分片连接,执行查询sql;
[0079]
第3步、fetch into code;循环fetch row到resultset变量;
[0080]
第4步、break code;结果集取完后跳出循环;
[0081]
第5步、close_cursor;清理结果集,释放连接。
[0082]
若第一控制语句为go to语句,则第二控制语句可以使用java标签+while+goto标签进行模拟。在此处,转换后代码与源码相差较大,往回跳,主要用于跳过后面处理进入下一次循环;往后面跳,主要用于出错处理,以进入下一次循环。
[0083]
若第一控制语句为exit语句,则第二控制语句可以使用java的break+标签。如果有条件,则增加if判断。若第一控制语句为continue语句,则第二控制语句可以使用java的continue+标签。同样的,如果有条件,可以增加if判断。若第一控制语句为return语句,则第二控制语句可以使用return,并根据实际情况做数据的精度转换。
[0084]
本实施例中,每一种第一控制语句都有对应的控制语句转化规则,可以将第一控制语句转换为适用于第二数据库的第二控制语句。
[0085]
可选地,步骤s30,即所述获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象之后,还包括:
[0086]
s41、获取所述第二数据对象的转换记录;
[0087]
s42、根据所述转换记录生成所述第二存储代码的转换分析报告。
[0088]
可理解地,在生成第二数据对象的过程中,同步进行记录,形成转换记录。然后,按预设的分析引擎处理转换记录,生成转换分析报告。在一些示例中,转换分析报告包括转换
的代码量、第一数据对象和对应的第二数据对象,方便进行比对,以判断是否转换完整。转换分析报告可以采用图片、表格等形式表示。
[0089]
本实施例可以同步生成转换分析报告,便于对第二存储代码进行验证。
[0090]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
[0091]
在一实施例中,提供一种存储代码转换装置,该存储代码转换装置与上述实施例中存储代码转换方法一一对应。如图3所示,该存储代码转换装置包括获取第一代码模块10、提取第一数据对象模块20、转换第二数据对象模块30和生成第二存储代码模块40。各功能模块详细说明如下:
[0092]
获取第一代码模块10,用于获取第一存储代码;
[0093]
提取第一数据对象模块20,用于从所述第一存储代码提取待转换的第一数据对象;所述第一数据对象包括第一数据名称、第一类型数据、第一函数、第一运算表达式和第一控制语句;
[0094]
转换第二数据对象模块30,用于获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象;
[0095]
生成第二存储代码模块40,用于根据所述第二数据对象生成第二存储代码。
[0096]
可选地,所述第二数据对象包括第二数据名称;
[0097]
转换第二数据对象模块30包括:
[0098]
获取名称规则单元,用于获取与所述第一数据名称对应的名称转化规则;
[0099]
名称检测单元,用于根据所述名称转化规则检测所述第一数据名称是否包含大小写和/或特殊字符;
[0100]
名称转换单元,用于若所述第一数据名称包含大小写和/或特殊字符,根据所述名称转化规则将所述第一数据名称中的大小写和/或特殊字符进行转化,生成第二数据名称。
[0101]
可选地,所述第二数据对象包括第二类型数据;
[0102]
转换第二数据对象模块30包括:
[0103]
获取类型规则单元,用于获取与所述第一类型数据对应的类型转化规则;
[0104]
类型转换单元,用于根据所述类型转化规则对所述第一类型数据进行转化,生成第二类型数据。
[0105]
可选地,所述第二数据对象包括第二函数;
[0106]
转换第二数据对象模块30包括:
[0107]
获取函数规则单元,用于获取与所述第一函数对应的函数转化规则;
[0108]
函数转换单元,用于根据所述函数转化规则对所述第一函数进行转化,生成所述第二函数。
[0109]
可选地,所述第二数据对象包括第二运算表达式;
[0110]
转换第二数据对象模块30,包括:
[0111]
获取运算规则单元,用于获取与所述第一运算表达式对应的运算表达式转化规则;
[0112]
运算表达式转换单元,用于根据所述运算表达式转化规则对所述第一运算表达式
进行转化,生成所述第二运算表达式。
[0113]
可选地,所述第二数据对象包括第二控制语句;
[0114]
转换第二数据对象模块30,包括:
[0115]
获取语句规则单元,用于获取与所述第一控制语句对应的控制语句转化规则;
[0116]
语句转换单元,用于根据所述控制语句转化规则对所述第一控制语句进行转化,生成所述第二控制语句。
[0117]
可选的,存储代码转换装置还包括:
[0118]
获取转换记录模块,用于获取所述第二数据对象的转换记录;
[0119]
生成转换报告模块,用于根据所述转换记录生成所述第二存储代码的转换分析报告。
[0120]
关于存储代码转换装置的具体限定可以参见上文中对于存储代码转换方法的限定,在此不再赘述。上述存储代码转换装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0121]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图4所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括可读存储介质、内存储器。该可读存储介质存储有操作系统、计算机可读指令和数据库。该内存储器为可读存储介质中的操作系统和计算机可读指令的运行提供环境。该计算机设备的数据库用于存储上述存储代码转换方法所涉及的数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机可读指令被处理器执行时以实现一种存储代码转换方法。本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。
[0122]
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机可读指令,处理器执行计算机可读指令时实现以下步骤:
[0123]
获取第一存储代码;
[0124]
从所述第一存储代码提取待转换的第一数据对象;所述第一数据对象包括第一数据名称、第一类型数据、第一函数、第一运算表达式和第一控制语句;
[0125]
获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象;
[0126]
根据所述第二数据对象生成第二存储代码。
[0127]
在一个实施例中,提供了一个或多个存储有计算机可读指令的计算机可读存储介质,本实施例所提供的可读存储介质包括非易失性可读存储介质和易失性可读存储介质。可读存储介质上存储有计算机可读指令,计算机可读指令被一个或多个处理器执行时实现以下步骤:
[0128]
获取第一存储代码;
[0129]
从所述第一存储代码提取待转换的第一数据对象;所述第一数据对象包括第一数据名称、第一类型数据、第一函数、第一运算表达式和第一控制语句;
[0130]
获取与所述第一数据对象对应的转化规则,根据所述转化规则对所述第一数据对象进行转化,生成第二数据对象;
[0131]
根据所述第二数据对象生成第二存储代码。
[0132]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机可读指令来指令相关的硬件来完成,所述的计算机可读指令可存储于一非易失性可读取存储介质或易失性可读存储介质中,该计算机可读指令在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
[0133]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。
[0134]
以上所述实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1