
引入:多數據庫適配-數據源Oracle->MySQL兼容切換
下文,小編主要以Oracle->MySQL適配為例->常見問答Q-A的方式闡述:

補充記錄:從高版本->低版本,數據導出->導入會出現如下異常

接著,通過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正則表達式,可參考之前在墨天輪問答-給出正則regexp的解答,

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......
文末:
回顧更多精彩請點擊^_^,記一次基于鯤鵬歐拉操作系統openGauss實踐過程
「 往期文章 」
Elasticsearch讀寫數據工作原理 | MySQL的重復數據插入處理
Elasticsearch進階篇 | 記kibana執行dsl腳本實戰過程
Kafka | 記一次修復Kafka分區所在broker宕機故障-引發當前分區不可用的思考過程
序列化 | Google的Gson與Alibaba的FastJson機制





