• 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.

      

  • 相关阅读:
    idea 找不到包或找不到符号
    JOISC部分题解
    欧拉数学习笔记
    [清华集训2017]生成树计数
    [ZJOI2019]开关
    【题解】CF817E Choosing The Commander
    CSP-S 2020游记
    【学习笔记】线段树合并
    【题解】[IOI2005]Riv 河流
    【题解】哈希冲突
  • 原文地址:https://www.cnblogs.com/juncaoit/p/8242757.html
Copyright © 2020-2023  润新知