Oracle 轉MySql

菜釐zi發表於2020-12-28

關鍵字 加引號保留字

-- 關鍵字 別名的時候 雙引號 通用, 列名 需要用反單引號 ``
describe   "describe"  
key     "key"    --正則 \s+key\s*,
cube  "cube" 
" " 有時候 有 比較 奇怪的報錯 看看 語句裡面是不是有這種空格  

註釋規範

-- 註釋   --與註釋之間需要有空格

日期處理

mysql : DATE_FORMAT(NOW(),'%Y-%m-%d  %H:%i:%s')
        str_to_date('2012-05-01 23:59:59','%Y-%m-%d %T')
oracle:  TO_CHAR(SYSDATE,'YYYY-MM-DD hh24:mi:ss')
        to_date(sysdate,'yyyy-mm-dd')

 

nvl函式

mysql: ifnull(A.USER_KPI,0)
oracle: NVL(A.USER_KPI,0)

 

其他函式

函式與括號之間不能有空格 ,函式 count (1) 錯誤寫法

lpad 不用改
呼叫儲存 不用改

concat mysql  可以多個拼接  2個欄位拼接 mysql oracle 通用,多個不行
       oracle 只能2個拼接, 多個需要巢狀呼叫 多個可以用 ||   

decode 函式 mysql 用以下2種方式替代 建議用case when  相容 mysql oracle
 -- 1.case when then
    Select title,case Emergency when 1 then '緊急'  else '普通' End  as  emergency   from already_sign
 --  2.if
    select a.title,if(a.Emergency=1,'緊急','普通')emergency from already_sign a

over() 
不是分頁的一般可以直接去掉
分頁的 複製一個count 方法 去掉這一列,程式碼中 直接用count 相容 oracle mysql 


TO_NUMBER

 

oracle 的 to_number
mysql 不需要

 

序列

mysql:  SELECT nextval_ncounter('SEQ_MD_ENTITY_ATTRIBUTE')  
建立了一個函式nextval_ncounter 查keycount表,需要在ncounter 表加一條資料

oracle: select SEQ_MD_ENTITY_ATTRIBUTE.nextval from dual

 

 

字串擷取

oracle SUBSTR('xxxxxx',0,10)  
mysql SUBSTR('xxxxxx',1,10)
下標不一樣

 

 

翻頁

oracle rownum
mysql limit 

--if 判斷多資料庫
  <if test="_databaseId='oracle'">
                FROM DUAL
    </if>

    <select id="queryListOfDark" resultType="com.rtx.inbound.asn.bean.Receipt">
        <![CDATA[
            SELECT * FROM (SELECT  r.*,  rownum rn FROM
                     (  SELECT  r.*  FROM receipt r  where 1=1
        ]]>
        <if test='spiltChars!=null'>
            ${spiltChars}
        </if>
        <![CDATA[      
              order by serialkey desc) r WHERE rownum <= #{s_pageSize})
                WHERE rn >= #{s_currentPage} 
        ]]>
    </select>
    --databaseid 區分多資料庫
    <select id="queryListOfDark" resultType="com.rtx.inbound.asn.bean.Receipt" databaseId="mysql">
        <![CDATA[
             SELECT  r.* FROM
                     ( SELECT * FROM receipt r where 1=1
        ]]>
        <if test='spiltChars!=null'>
            ${spiltChars}
        </if>
        <![CDATA[
                order by serialkey desc) r
                  limit #{startPage},#{pageSize}
        ]]>
    </select>

相關文章