DB2与oracle类型对比
本文摘自http://www.cnblogs.com/cy163/archive/2010/11/17/1880280.html
做过DB2数据库应用迁移的工程师,了解IBM MTK工具在迁移过程中所能完成任务,但这个工具并不能帮你完成所有的迁移工作,
还有大量的迁移工作需要我们借助自己的经验和方法来完成,下面是一些在DB2数据库移植过程中常见的问题简单总结。
这里我只是针对Oracle迁移到DB2的常见问题描述。
1 DB2与oracle常用数据类型之间的对应关系
Oracle 数据类型 DB2 UDB 数据类型 注意事项
CHAR(n) CHAR(n) nB 1 <= n <= 254,若n>255使用VARCHAR(n)
VARCHAR2(n) VARCHAR(n) nB n <= 32672,若n>32672使用CLOB(n)
BLOB BLOB(n) 若n<=2GB,则使用BLOB(n)
CLOB CLOB(n) 若n<=2GB,则使用CLOB(n)
NUMBER FLOAT / 在实际使用中在ORACLE里并不是用于非精确的数据,要根据实际情况参照DECIMAL(p,s),DECIMAL(p)转换
REAL /
DOUBLE
NUMBER(p) SMALLINT/ 2B SMALLINT, if 1 <= p <= 4
INTEGER/ 4B INTEGER, if 5 <= p <= 9
BIGINT/ 8B BIGINT, if 10 <= p <= 18
NUMBER(p,s) DECIMAL(p,s) pB
DATE DATE 如果只使用MM/DD/YYYY,选择DATE
TIME 如果只使用HH:MM:SS,选择TIME
TIMESTAMP 如果要使用日期和时间,选择时间戳类型
可以使用Oracle中的TO_CHAR()函数来取DATE的字串来分别与DB2的DATE, TIME,TIMESTAMP相匹配
2. ORACLE的隐形转换处理
上表列举了DB2与oracle数据类型之间的对应关系,除了在建立表结构时需要注意这两种数据库之间的类型转换之外,
在程序迁移过程中还需要注意的一点是:
oracle支持数据类型之间的隐形转化,但DB2是不支持数据这个特性的,因此在使用SQL进行数据查询或更新时必须配置字段的类型。
例如:在表中employee 字段empno 定义为数字类型
select * from employee where empno='1010';
该语句在oracle数据库环境可执行通过,但在DB2下报错SQLCODE: -408, SQLSTATE: 42821。修正为
select * from employee where empno=1010;
如果在程序中使用变量,可以使用cast关键字进行数据类型转换工作。语法如下:
select * from employee where empno =cast(V_name as bigint)
select * from employee where empno =cast(V_name as varchar(10))
3. 日期时间处理
在oracle中类型DATE代表日期、时间以及日期时间值,在DB2中每中类型的时间都有具体的类型与之对应,如下:
取系统时间:
Oracle
SELECT sysdate from dual;
DB2
SELECT current timestamp FROM sysibm.sysdummy1;
SELECT current date FROM sysibm.sysdummy1;
SELECT current time FROM sysibm.sysdummy1;
转换日期时间到字符类型:
Oracle
TO_CHAR(date_expression, 'YYYY-MM-DD')
TO_CHAR(date_expression, 'HH24:MI:SS')
DB2
CHAR(date_expression,ISO)
CHAR(time_expression,ISO)
转换日期时间字符串到日期时间类型:
Oracle
TO_CHAR(date_expression, 'YYYY-MM-DD')
TO_CHAR(date_expression, 'HH24:MI:SS')
DB2
DATE('2005-05-20')
TIME('18:59:59')
TIEMSTAMP('2007-2-1', '21:12:12')
TIEMSTAMP('2007-2-1 21:12:12')
DB2也有TO_CHAR 和 TO_DATE函数,但只能提供固定的转换格式,如下
TO_CHAR (timestamp_expression,'YYY-MM-DD HH24:MI:SS')
TO_DATE (string_expression, 'YYY-MM-DD HH24:MI:SS')
4. 空值处理
Oracle空值处理通过 nvl 函数实现,DB2中通过COALESCE函数实现。在DB2 V9.5中已经实现了 NVL 函数。
在Oracle中,对于null数据的处理比较灵活,在与NULL值进行比较和拼接时与DB2的结果完全不同,例如:
SELECT 'abc' || c1 FROM t1 (c1 IS NULL) ORACLE得到 abc 的结果
在DB2中为null,要想得到 abc 的结果,按照如下语法修改,
SELECT 'abc‘ || COALESCE(c1,'') FROM t1
还有在Oracle中 select * from table where id = null 这种语法是允许的,在DB2中不可。
但需要说明的是在Oracle中虽然select * from table where id = null是可以通过语法检查,
但与select * from table where id is null语句得到结果集是不同的,所以在移植时要考虑真实的业务意义,在翻译成DB2的语法。
另外有些应用有如下用法
SELECT * FROM TABLE WHERE ('' IS NULL OR ID is null) AND ('' IS NULL OR NAME = '') AND NUM = '0'
在DB2中可翻译为:
SELECT * FROM TABLE WHERE (cast(null as varchar(10)) IS NULL OR ID is null) AND (cast(null as varchar(10)) IS NULL OR NAME is null) AND NUM = '0'
DB2与oracle类型对比的更多相关文章
- db2和oracle字段类型对比
在网上找到一片关于oracle与DB2数据类型的比较,特记下来. Oracle DB2/400 Oracle数据类型 注意事项 DB2 UDB数据类型 注意事项 DATE DATETIMETIMEST ...
- DB2和Oracle区别
转 http://blog.chinaunix.net/uid-7374279-id-2057574.html 写在前面:今天客户来访(日本人),问我DB2和Oracle区别.因为不是DBA(勉强的理 ...
- Db2与Oracle的区别
这个部分是自己随便整理下. 在工作上需要,公司需要DB2兼容Oracle. 不懂DB2与Oracle的细节,这里努力整理,以后精通了再回来重新修改. https://www.2cto.com/data ...
- [转载]DB2与ORACLE、MYSQL比较2
原文地址:DB2与ORACLE.MYSQL比较2作者:欣颖 4.2 Oracle9i Oracle的产品战略是每12到18个月发布一个主要版本.主要发行版本所遵循的命名战略在PC领域中更为常见,它不 ...
- (转)DB2和 Oracle的并发控制(锁)比较
DB2和 Oracle的并发控制(锁)比较 牛 新庄2005 年 12 月 26 日发布 原文:https://www.ibm.com/developerworks/cn/data/library/t ...
- DB2、ORACLE SQL写法的主要区别
DB2.ORACLE SQL写法的主要区别 说实话,ORACLE把国内的程序员惯坏了,代码中的SQL充斥着大量ORACLE特性,几乎没人知道ANSI的标准SQL是什么样子,导致程序脱离了ORACL ...
- MySql - JdbcType - Oracle类型映射
MySql - JdbcType - Oracle类型映射 MySQL数据类型 JDBC TYPE Oracle数据类型 BIGINT BIGINT NUMBER(20) TINYINT TINY ...
- db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码
db2 mysql oracle 邮件 tomcat ssh telnet ftp samba 账号密码 检测
- Oracle类型number与PG类型numeric对比和转换策略
Oracle 11g number 任意精度数字类型 http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT3 ...
随机推荐
- Spark SQL 编程
Spark SQL的依赖 Spark SQL的入口:SQLContext 官方网站参考 https://spark.apache.org/docs/1.6.2/sql-programming-guid ...
- docker 配置pull源
登录阿里云 找到镜像服务 在/etc/docker下创建daemon.json文件并写入 最后重启docker服务 sudo service docekr restart
- Sqoop增量导入
Argument Description --check-column (col) Specifies the column to be examined when determining which ...
- spring data jpa @query的用法
@Query注解的用法(Spring Data JPA) 参考文章:http://www.tuicool.com/articles/jQJBNv . 一个使用@Query注解的简单例子 @Query( ...
- IE6部分兼容问题
border-style:dotted 点线 IE6不兼容 (除了solid以外,其它都有兼容问题,不完全一样) a IE6 不支持a以外的所有标签伪类,IE6以上版本支持所有标签的hover伪类. ...
- [Ora]-1309. OCI is not properly installed on this machine (NOE1/INIT)
When the Oracle client software has not been properly installed, you will get an exception when tryi ...
- Spring MVC 数据绑定流程
DataBinder 数据绑定 入参,校验,格式化, ConversionService: 进行数据类型转换和数据格式化 Validators 进行数据合法性的校验, 把结果放入BindingResu ...
- Delegate 改变指向
import mx.utils.Delegate; nowWordSound.onSoundComplete =Delegate.create(this, playOver); function pl ...
- 8 并发编程-(线程)-多线程与多进程的区别&Thread对象的其他属性或方法
1.开启速度 在主进程下开启线程比 开启子进程快 # 1 在 主进程下开启线程 from threading import Thread def work(): print('hello') if ...
- 富文本编辑器-UEditor
官方网址:http://ueditor.baidu.com/website/index.html 下载地址:http://ueditor.baidu.com/website/download.html ...