mysql转oracle的采坑记录

最近在将一个开源的任务调度项目(XXL-JOB)从mysql转为oracle,之前采用的是mybatis+mysql,现在改为mybatis+oracle的结构,在转换的过程中遇到了很多问题。

分页问题

mysql的分页

SELECT <include refid="Base_Column_List" />
		FROM xxl_job_info AS t
		ORDER BY id DESC
		LIMIT #{offset}, #{pagesize}

oracle的分页

select *  from (
		SELECT row_number() over(ORDER BY t.job_id DESC) r,
		<include refid="Base_Column_List" />
		FROM xxl_job_info  t
		) WHERE r BETWEEN #{offset}+1 AND #{offset}+#{pagesize}

当然orcale的分页还可以参考分页插件,但是这里为了不动上层的代码,直接修改的mapper文件,就是上面这种方式

;问题

在mybatis中mysql数据库是可以在sql语句后面加上分号(;)的,但是orcale的sql后面加分号(;)则会报错(ORA-00911: 无效字符—错误),需要把所有sql后面带有的分号(;)去掉

jdbcType 的问题

在mysql中添加空值,则会默认给一个空值,但是orcale中没有指定jdbcType的时候,传入空值就会报错,需要我们指定参数的jdbcType.

字段查询结果为大写

SELECT
			COUNT(handle_code) triggerDayCount,
			SUM(CASE WHEN (trigger_code in (0, 200) and handle_code = 0) then 1 else 0 end) as triggerDayCountRunning,
			SUM(CASE WHEN handle_code = 200 then 1 else 0 end) as triggerDayCountSuc
		FROM xxl_job_log
		WHERE trigger_time BETWEEN #{from,jdbcType=TIMESTAMP} and #{to,jdbcType=TIMESTAMP}

在代码中用map接收上面sql的结果,
使用mysql : map中的key值为sql中的驼峰样式
使用oracle:map中的key值全部转为了大写,如(triggerDayCount 变成了TRIGGERDAYCOUNT)
这样会导致我们用key从map中取值的时候取不到

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值