引入:写在前面的话,每一篇摘文都以实际案例场景出发,周末抽空余时间记录每一次mark历程,在不一样的业务实际场景下,针对项目阶段所产生的变化,制定不一样的技术方案。不论多么渺小的技术方案,放在其对应的场景下都有着不一样的意义。实践是检验真理的唯一标准,当真正实操过后参与讨论,或许这会让你有一点新发现,希望对读者在思考上有点不一样的IDea,欢迎文末评论投稿,热衷于分享->每天译点晓知识。
下文,小编主要以Oracle->MySQL适配为例->常见问答Q-A的方式阐述:
补充记录:从高版本->低版本,数据导出->导入会出现如下异常
IMP-00010: not a valid export file, header failed verification
接着,通过SQL查询当前Oracle版本,
select * from v$version
此时,通过Notepad++修改dmp文件中版本信息为,
再次执行imp命令,
[oracle@localhost ~]$ imp yd_dev_tmp/user@ip/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,其中MySQL方言可指定databaseId为mysql,Oracle方言可指定databaseId为oracle。
Oracle日期区间计算,
MySQL与Oracle正则表达式,
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......
「 往期文章 」
数据库在线实训平台-MySQL篇
Elasticsearch进阶篇 | 记kibana执行dsl脚本实战过程
Oracle优化案例 | 从执行计划定位SQL查询问题
Kafka | 记一次修复Kafka分区所在broker宕机故障-引发当前分区不可用的思考过程
达梦 | 记一次国产数据库适配的思考过程
扫描二维码
获取更多精彩
扫码关注译点