`
byf157
  • 浏览: 207765 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

db2与oracle 使用差异

    博客分类:
  • db2
 
阅读更多

1、取前N条记录

Oracle:Select * from TableName where rownum <= N;

DB2:Select * from TableName fetch first N rows only;

2、取得系统日期

Oracle:Select sysdate from dual;

DB2:Select current timestamp from sysibm.sysdummy1;

3、空值转换

Oracle:Select productid,loginname,nvl(cur_rate,'0') from TableName ;

DB2:Select productid,loginname,value(cur_rate,'0') from TableName;

Coalesce(cur_rate,'0')

4、类型转换(8版有了to_char,to_date,9版新增了to_number)

Oracle:select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;

DB2:select varchar(current timestamp) from sysibm.sysdummy1;

l        Oracle数据类型改变函数:to_char()、to_date()、to_number()等;如果仅仅取年,月,日等,可以用to_char(sysdate, 'YYYY'),to_char('MM') ,to_char('DD')取得。只取年月日TRUNC(SYSDATE),取时分秒TO_CHAR(SYSDATE,'HH24:MI:SS')。

l        DB2数据类型改变函数:char()、varchar()、int()、date()、time()等;取得年,月,日等的写法:YEAR(current timestamp),MONTH(current timestamp),DAY(current timestamp),HOUR(current timestamp),MINUTE(current timestamp),SECOND(current timestamp),MICROSECOND(current timestamp),只取年月日可以用DATE(current timestamp),取时分秒TIME(current timestamp)。Char()是定长字符串(1-255),varchar()为非定长字符串(1-32672)日期,时间形态变为字符形态: char(current date),char(current time)将字符串转换成日期或时间形态:TIMESTAMP('2002-10-2012:00:00'),DATE('2002-10-20'),DATE('10/20/2002'),TIME('12:00:00')

l        目前DB2 V8也支持to_char和to_date

5、快速清空大表

Oracle:truncate table TableName ;

DB2:alter table TableName active not logged initially with empty table;

6、关于ROWID

Oracle它是由数据库唯一产生的,在程序里可以获得

DB2       v8也有此功能。

7、To_Number

Oracle:select to_number('123') from dual;

DB2:select cast('123' as integer) from sysibm.sysdummy1;

SELECT CAST ( current time as char(8)) FROMsysibm.sysdummy1

8、创建类似表

Oracle:create table a as select * from b ;

DB2:create table a like b ;

CREATE TABLE tab_newAS select col1,col2…FROMtab_old DEFINITION ONLY (8版有效,9版无效)

9、decode方法

Oracle:decode方法(DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值))或者case语句

DB2中只有CASE表达式

SELECT id ,name ,

CASE

       WHEN integer(flag)=0 THEN ‘假’

       WHEN integer(flag)=1 THEN ‘真’

       ELSE ‘异常’

END

       FROM TEST

或者

SELECT id ,name ,

CASE integer(flag)

       WHEN 0 THEN ‘假’

       WHEN 1 THEN ‘真’

       ELSE ‘异常’

END

       FROM TEST

10、子查询(8版,9版也支持子查询)

Oracle:直接用子查询

Db2:with语句

WITH a1 AS

(select max(id) as aa1 from test )

   select id ,aa1 from test ,a1

11、数据类型

比较大的差别:

Oracle:char 2000

DB2:      char 254

Oracle: date   datetime

Db2:       DATE:日期TIME:时间TIMESTAMP:日期时间

 


from: http://hi.baidu.com/neusunly/blog/item/3867a9faaae96fdcb58f3148.html

 


1、数据类型转换函数


整型转字符型
字符串转整形
字符串转浮点型
浮点型转字符串
字符串转日期
字符串转时间戳
日期转字符串

ORACLE
to_char(1)
to_number('1')
to_number('1.1')
to_char(1.1)
to_date('2007-04-26','yyyy-mm-dd')
to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')
to_char(to_date('2007-04-29','yyyy-mm-dd'),'yyyy-mm-dd')

DB2
char(1)
int('1')
double('1.1')
char(1.1)
date('2007-04-26')
to_date('2007-04-26 08:08:08','YYYY-MM-DD HH24:MI:SS')
char(date('2007-04-29'))

兼容写法
cast(1 as char)
cast('1' as int)



兼容


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型

一个采用hibernate后常见的兼容问题是:

如果在映射文件中定义了某个字段为Date型

<property name="createTime" type="java.util.Date" >

         <column name="CREATE_TIME" length="7" />

</property>

则在DB2下,此字段必须定义为timestamp,而不能定义成DATE,不然会报出字符串右截断的错误


对于DB2来说,在查询条件中可以直接用字符串指定日期或时间戳类型字段的值,例如 where create_date = '2007-04-26' 、where create_timestamp = '2007-04-26 08:08:08' ,无须使用字符串转日期函数


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的不同
DB2 substr举例如下:

masa_group表的f_groupCode字段定义成VARCHAR(100),所以下面这个语句不会出错,如果是substr(f_groupCode,1,101)就出错了

select * from masa_group where substr(f_groupCode,1,50) = '001006' order by f_groupcode

在DB2下无错,但是

select * from masa_group where substr('001006', 1, 50) = '001006' order by f_groupcode

就报错,说第三个参数超限

这是因为'001006'已经定义为一个长度为6的charater了


这点和ORACLE有很大不同,请大家注意


如果是要从第一位取到最后一位,稳妥的办法是不要加第三个参数

ORACLE:select substr('123456',1) from dual

DB2:select substr('123456',1) from sysibm.sysdummy1

都没有问题

分享到:
评论

相关推荐

    DB2和ORACLE_应用开发差异比较

    本文将深入探讨DB2与Oracle在应用开发中的主要差异,以帮助开发者更好地理解和选择适合其项目需求的数据库系统。 ### 数据库对象的异同 - **实例(Instance)**:在DB2和Oracle中,实例都指的是数据库管理系统运行...

    DB2和ORACLE 应用开发差异比较

    DB2和Oracle是两种广泛应用的关系型数据库管理系统,它们在应用开发方面存在诸多差异。下面将对这些差异进行详细的比较。 1. **实例与数据库的区别** - Oracle中的实例(Instance)是内存结构和进程的集合,它连接...

    DB2和oracle对比

    标题中的“DB2和Oracle对比”意味着我们将探讨这两款企业级数据库管理系统——Oracle数据库和IBM的DB2——在性能、功能、成本、易用性、安全性以及市场占有率等方面的差异。 Oracle数据库是由Oracle公司开发的一款...

    oracle和db2的区别

    本文旨在探讨Oracle与DB2这两种主流关系型数据库管理系统(RDBMS)之间的关键差异。Oracle由甲骨文公司开发,而DB2则由IBM推出。两者均广泛应用于企业级环境,提供了强大的数据管理能力。下面我们将从多个方面详细对比...

    DB2与ORACLE常用语句对照

    在数据库管理领域,DB2和Oracle都是广泛应用的关系型数据库管理系统,它们都支持SQL语言,但具体语法和功能上存在一些差异。"DB2与ORACLE常用语句对照"的主题旨在帮助用户理解和转换这两种数据库系统中的SQL命令。...

    db2和oracle的区别.docx

    DB2使用db2backup和db2restore命令,而Oracle则有RMAN(恢复管理器)等工具。 七、集群和高可用性 Oracle RAC(Real Application Clusters)提供了高度可用的多节点集群解决方案,而DB2也有其集群和复制技术,如DB2...

    DB2与Oracle 体系架构

    描述:本文深入解析了IBM DB2与Oracle数据库系统在体系架构上的异同,旨在为数据库管理员、架构师及IT专业人员提供深度洞察,帮助理解两种主流数据库技术的核心差异。 ### 一、DB2与Oracle的服务器结构对比 #### ...

    oracle与db2区别

    以下是对Oracle与DB2之间主要区别的详细分析: 1. **许可证模式**: - Oracle提供多种许可证选项,包括单用户许可证、CPU许可证、基于处理器的复杂度和用户数的许可证等。这种灵活性使得Oracle能够适应不同规模的...

    DB2常用函数与Oracle比较

    - **Decimal/Double/Integer/Smallint/Real**: 这些数据类型在DB2和Oracle中都可以直接使用,无需特别的转换函数。 - **Hex**: DB2提供`HEX`函数来将二进制数据转换为十六进制格式。 - **Date/Time/Timestamp**: ...

    oracle与db2基本数据类型和语法的差异

    oracle与db2基本数据类型和语法的差异总结

    DB2到ORACLE的数据转移工具程序

    DB2和Oracle虽然都基于SQL标准,但在具体语法、存储结构和性能优化上存在差异。例如,DB2使用的是LUW(Linux、Unix、Windows)平台,而Oracle支持多种操作系统。了解这些差异对于数据迁移至关重要。 2. 数据类型...

    Oracle与DB2数据类型分类对应说明

    例如,在 DB2/400 中,我们可以使用定长的 CHAR(N)类型与 Oracle 的 VARCHAR2(n)相对应,这样可以提高效率和节省存储空间。 四、LOB 类型 DB2/400 提供 VARCHAR 和 CLOB 与 Oracle 中的 RAW 和 LONG RAW 相...

    DB2和 Oracle的并发控制

    【Oracle并发控制】Oracle同样采用锁机制来控制并发,但其具体实现可能与DB2有所不同。Oracle也支持行级和表级的锁定,但具体的锁模式和兼容性矩阵可能会有差异。Oracle还提供了其他的并发控制技术,如多版本并发...

    Oracle迁移到DB2 SQL语句差异

    以下是对Oracle与DB2之间SQL语句差异的详细总结: #### 取前N条记录 **Oracle**: 使用`ROWNUM`来限制返回的行数。 ```sql SELECT * FROM TableName WHERE ROWNUM ; ``` **DB2**: 使用`FETCH FIRST`关键字来实现...

    DB2和 Oracle的并发控制(锁)比较

    #### 四、DB2与Oracle的比较 **4.1 锁的类型** - **DB2**:支持更广泛的锁类型,如IS、IX、SIX、S、U、X、Z等。 - **Oracle**:虽然锁类型较少,但同样能够满足大多数应用场景的需求。 **4.2 锁的兼容性** - **...

    db2与oracle差别.pdf

    例如,Oracle 针对 Java 语言提供了 JDBC 扩展,这与 DB2 提供的驱动在语法上存在一定的差异;有些 JDBC 接口方法,像 executeQuery 方法,DB2 只能通过这个方法执行查询操作,而 Oracle 除了查询外,还可以执行其他...

    Oracle与DB2的对应关系

    Oracle 与 DB2 的对应关系 Oracle 与 DB2 是两种常用的关系数据库管理系统,尽管它们有着不同...Oracle 与 DB2 之间存在着一定的对应关系,但它们之间也存在着一定的差异。了解这些差异对于数据库开发和移植非常重要。

    DB2 & Oracle

    ### 数据库概述与DB2和Oracle的区别 #### 数据库概述 数据库系统是现代信息技术的核心组成部分,用于存储、管理和检索大量数据。其中,Oracle数据库和IBM的DB2是两种广泛使用的数据库管理系统(DBMS),它们各自拥有...

    ORACLE转DB2对照全解

    #### 一、Oracle SQL PL与DB2 inline SQL PL对比 本章节主要介绍Oracle SQL PL与DB2 inline SQL PL之间的对比,包括但不限于存储过程、触发器、用户定义函数(UDF)、条件语句及流程控制等。 ##### 1.1 创建存储...

Global site tag (gtag.js) - Google Analytics