Db2與Oracle的區別


  這個部分是自己隨便整理下。

  在工作上需要,公司需要DB2兼容Oracle。

  不懂DB2與Oracle的細節,這里努力整理,以后精通了再回來重新修改、

  https://www.2cto.com/database/201207/144503.html。

1.數據類型轉換函數

  

 

2.where條件弱類型判斷

  oracle: where 字符型字段 in (整形) 是允許,但是DB2不允許
    select 'abc' from dual where '1' in (1) 在oracle下可通過
    select 'abc' from sysibm.sysdummy1 where '1' in (1) 在DB2下報錯

  oracle:where 字符型字段=數字型字段允許,但是DB2不允許

    select 'abc' from dual where '1'=1 在oracle下可通過
    select 'abc' from sysibm.sysdummy1 whre '1'=1 在DB2下報錯

 

3.replace字段

  oracle支持,DB2不支持 create or replace語句在DB2下是非法的

 

4.子查詢別名 

  ORACLE 支持select * from(select 1 from dual) 或者 select * from(select 1 from dual) t

 

  DB2 支持select * from(select 1 from sysibm.sysdummy1) t 或者 select * from(select 1 from sysibm.sysdummy1) as t

 

  固兼容的寫法是select * from(子查詢) t

 

5.DATE數據類型的區別

  ORACLE中DATE型也是帶有時分秒的,但DB2下DATE只是年月日,如'2007-04-28',且可作為字符串直接操作,DB2中要記錄時分秒必須采用TIMESTAMP型。

  

6.分頁處理 

  如果采用JDBC分頁的話,注意rownum在DB2中不受支持,比如從masa_area表中取得area_id最小的10條記錄,語句分別如下,注意這里的別名t書寫方法

 

  ORACLE: select t.* from (select rownum as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10

 

  DB2: select t.* from (select rownumber() over() as r1 ,masa_area.* from masa_area order by area_id) t where t.r1<=10

 

7.decode函數

  decode函數在DB2不被支持,兼容的寫法是采用case when

 

8.NVL函數

  nvl寫法在DB2不被支持,兼容的寫法是采用coalesce

  ORACLE: select NVL(f_areaid,'空') from masa_user 等同於 select coalesce(f_areaid,'空',f_areaid) from masa_user

  DB2: select coalesce(f_areaid,'空',f_areaid) from masa_user

 

9.substr不同

 

10.獲取當前系統時間

  ORACLE Sysdate

  DB2           CURRENT DATE

 

11.

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM