3

鲲鹏认证 | 记一次数据源从oracle到mysql兼容切换历程 -利来国际app

7308


引入:多数据库适配-数据源oracle->mysql兼容切换

下文,小编主要以oracle->mysql适配为例->常见问答q-a的方式阐述:


补充记录:从高版本->低版本,数据导出->导入会出现如下异常


接着,通过sql查询当前oracle版本,

select * from v$version


此时,通过notepad 修改dmp文件中版本信息为


再次执行imp命令,

[[email protected] ~]$ imp yd_dev_tmp/[email protected]/orcl file=/home/oracle/xxx.dmp ignore=y full=y;

成功导入数据泵.dmp文件。(其中,可通过su - oracle进入oracle目录,dmp文件可上传到/home/oracle路径)




上述列举了部分常见函数

1、coalesce函数 && nvl函数mysql:coalesce()oracle:coalesce()、nvl()coalesce函数在mysql跟oracle都适用,nvl函数在oracle中适用,coalesce可替换nvl。
2、str_to_date函数 && to_date函数mysql:str_to_date(field,'yyyy-mm-dd')oracle:to_date(field,'yyyy-mm-dd hh24:mi:ss')
3、convert函数 && to_char函数mysql:convert(field,char)oracle:to_char(field)
4、date_format函数 && to_char函数mysql:date_format(field,'%y-%m-%d')oracle:to_char(field,'yyyy-mm-dd')

mysql日期区间计算,


对应java中常用orm映射框架mybatis中xml写法-sql,其中。



oracle日期区间计算,


mysql与oracle正则表达式,可参考之前在墨天轮问答-给出正则regexp的解答


oracle函数decode

decode(a.klx,'01','居民身份证','02','居民户口簿','03','护照','04','军官证','05','驾驶证','06','港澳居民来往内地通行证','07','台湾居民来往内地通行证','其他')

mysql函数if可实现oracle中decode效果

if(a.klx='01','居民身份证',if(a.klx='02','居民户口簿',if(a.klx='03','护照',if(a.klx='04','军官证',if(a.klx='05','驾驶证',if(a.klx='06','港澳居民来往内地通行证',if(a.klx='07','港澳居民来往内地通行证','其他')))))))


mysql视图中函数,


oracle视图中函数


基于mybatis插件的思想,根据当前数据库databaseid,拦截sql,加入各自数据库的sql方言函数兼容,无需多套数据库xml中sql写法。后续考虑在github上开源一款sql插件,支持插拔式-需要时开启。


可自动将复杂sql填充参数打印sql语句,


打印其执行计划及耗时,助力于生产环境分析sql,排查问题,性能优化



引出这样一个小场景-思考:当你需要作多数据库兼容适配的时候,想提前预估需要改动的一个数量级,这时若需要对数据库层中各个sql方言编写测试用例,作成功或失败率评估,那么如何拥有一个java版本,单元测试用例-代码自动生成器,根据类名配置,即可知晓当前类中所有sql方言的成功或失败率?^_^

当然,我们也可以在工作之余去看看其他的开发语言,php,python,go......


文末:

回顾更多精彩请点击^_^,记一次基于鲲鹏欧拉操作系统opengauss实践过程

「 往期文章 」


数仓进阶 | 记一次olap分析引擎演进思考过程






最后修改时间:2021-12-21 13:18:38
「喜欢文章,快来给作者赞赏墨值吧」
【利来手机国际的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:[email protected]进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论