jfinal2.2之mysql兼容oracle浅谈

《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子句中或聚合函数中


评论区

爪爪

2017-07-24 15:50

这是分享的啥,搞笑吗

jounzhang

2017-09-21 15:46

在这里直接贴了升级方案简要文档了,这里补充几点建议:如果项目会考虑到数据库迁移的话,尽量使用标准SQL,尽量使用jfinal自带的分页,尽量不适用数据库个性化函数或使用java处理替代。

热门分享

扫码入社