在实际项目开发过程中,尤其是当前各国之间的技术博弈异常剧烈,加上国内对于开源项目或者国产项目的支持度越来越高,因此在适配有关涉及国内政府高校以及国央企单位项目时,DM数据库的选择成了一个必需的操作,也是一个不得已而为之的选择,所以才有了Mysql8转换DM8改造和调整这篇文章。
序言:dm数据库可视化链接工具
官方推荐可使用SQLark,官方链接如下:
一.字符串转换出错
在mysql语法的查询中,即使数据类型不一致的情况下依然可以正常执行查询,但是DM在关联查询是必需保证关联条件的数据类型一致。
二.递归语法改造,可参照oracle语法
1.DM8下递归语法的说明
select fie1,fie2...
from tab1
-- 开始查询的父级条件,也可以是where后面的查询条件
-- 如果没有,可以写成查询所有“START WITH 1 = 1”
START WITH pid = '66c59905'
-- 关联子级的条件(需要参照START WITH来确定)
-- 从树的根节点依次往下(最后的叶节点)查询:PRIOR id = pid
-- 从树的最后叶节点依次往上(到根节点)查询:id = PRIOR pid
CONNECT BY PRIOR id = pid
其他相关具体请参考dm下语法和示例说明:
2.Mysql8下递归基础写法
with RECURSIVE sDBa as (
select * from
Serv_Area_Info
where
pid = '66c59905'
union
select defAreaDB.* from
Serv_Area_Info defAreaDB
inner join sDBa as PRIOR on PRIOR.id = defAreaDB.pid
)
select * from sDBa
3.DM8下基于Mysql8基础递归语法改造
select * from Serv_Area_Info
START WITH pid = '66c59905'
CONNECT BY PRIOR id = pid
4.Mysql8下递归关联子查询
with RECURSIVE sDBa as
( select * from Serv_Area_Info
where id in ( select defenceAreaId from Serv_defenceArea where relateId = '66c59905' )
union
select defAreaDB.* from Serv_Area_Info defAreaDB
inner join sDBa as PRIOR on PRIOR.id = defAreaDB.pid
)
select * from sDBa
5.DM8下基于Mysql8递归关联子查询改造
select id from Serv_Area_Info
START WITH
id in ( select defenceAreaId from Serv_defenceArea where relateId = '66c59905' )
CONNECT BY PRIOR id = pid
三.不同数据库的方言和函数改造说明
1.DM8数据库不支持【`fie`】,须使用单引号或者双引号'fie'
2.Mysql8字符串分析函数 group_concat()在DM8下不支持,须使用WM_Concat()