《xxxx系统》v2.3数据库mysql兼容oracle方案
升级概述
对《xxxx系统》v2.3进行重构,使之兼容oracle数据库,oracle版本12cR2。
升级步骤
系统可行性分析
可以升级。
确定升级方案
重构代码,对mysql于oracle存在兼容性问题的地方进行重构。
实施升级
修改不兼容的代码、sql语句、个性化函数采用兼容或替代方案。
升级后测试
测试oracle环境所有系统功能。
兼容点
分页查询
关键字:
limit
处理方式:
将limit分页更改为
OFFSET #{offset} ROWS FETCH NEXT #{limit} ROWS ONLY
个性化函数
关键字:
now、concat、group_concat、locate、ifnull、date_format、if
处理方式:
now替换为sysdate
concat使用||方式替换
group_concat语法更改为 LISTAGG(字段名称, ',') WITHIN GROUP(ORDER BY 字段名称)
将locate替换为为instr并做相应调整,即参数位置调换(此处可以用like实现,但是instr可以使用函数索引,考虑到效率和后期优化不这样处理)
IFNULL替换为nvl
date_format使用to_char(字段,格式)替换
if使用decode函数或case when…替代
date与string兼容性处理
关键字:
SQL语句中原始mysql直接对date类型字段设置string类型的值的地方。
处理方式:
将string的地方更改为to_date(string,'时间格式')
派生记录row兼容性处理
关键字:
使用 select 常量列表然后使用union或union all关键字的地方。
处理方式:
在后面增加 from dual
mysql非标准sql的group by
关键字:
select … group by …
处理方式:
使用标准sql的group by,select列表中的字段必须包含在group by子句中或聚合函数中