这个部分是自己随便整理下。

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

1.数据类型转换函数

  Db2与Oracle的区别_数据类型

 

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.