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中取值的時候取不到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章