分析db2与oracle的差别 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    分析db2与oracle的差别

    开发了一段时间的一个系统一直在db2上使用,终于开发的差不多,测试没什么大问题了,

分析db2与oracle的差别

。突然有一个客户现场要求用oracle数据库,刚开始觉得应该没什么问题,开发的时候虽然没在oracle数据库测试过,但是无非也就是一些SQL的问题,结果用oracle数据库一发布就傻眼了,我嘞个去竟然没有一个功能能正常运行,所有的功能进去都是空白页面,当然报错的都是SQL,但是这也太超乎我的想象了啊!所以还是记录下遇到的问题吧,以后写SQL的时候还是尽量通用,省的以后移植的时候费那么大劲了。

    1、取得系统当前日期。db2为current date 但是这个在oracle中是不适用的,oracle为sysdate。我查找资料都没有说明db2可不可以用sysdate,但是我的db2 9.7的版本的确可以用sysdate这个函数的。所以就ok了,所有的取得系统当前日期函数都改为sysdate,适用oracle和db2。

    2、日期类型字段。对于数据类型为date的字段,在db2中操作的时候不用做任何处理,可以当varchar类型的字段一样处理。但是oracle就不能这么干了,在查询的时候必须用T0_CHAR(CLOMUN,'yyyy-mm-dd'),在update或者insert的时候必须用TO_DATE(CLOMUN,'yyyy-mm-dd')转为DATE类型。在db2中也可以用to_char和to_date函数。

    3、db2中的DECIMAL和oracle中的NUMBER类型。db2中的DECIMAL对应oracle中的NUMBER类型,来定义数字类型和保留几位有效数字,

电脑资料

分析db2与oracle的差别》(https://www.unjs.com)。例如:oracle中定义number(16,2)(四舍五入) db2中定义decimal(16,2)(会直接截取)。对于DECIMAL类型是不能把空值放进去的,如果为空则默认插入0,而且如果为10.00查询后是可以直接显示的,但是number类型就只显示10所以如果要显示10.00就需要对其进行格式化。另外number类型中是可以放空值的。

    4、SQL的区别。db2和oracle中有一些SQL的区别,这个都是必然的,但是大部分的简单SQL都还是一样的,这里列举一些吧:

    查询序列

    oracle:

    select T18_ONLINE_TASKFACT_TASKKEY.currval from dual(当前值)

    select T18_ONLINE_TASKFACT_TASKKEY.nextval from dual(下一个值)

    db2

    select PREVVAL FOR T18_ONLINE_TASKFACT_TASKKEY from sysibm.sysdummy1 (当前值)

    select NEXTVAL FOR T18_ONLINE_TASKFACT_TASKKEY from sysibm.sysdummy1(下一个值)

    查询前10行数据

    db2 :   select * from test fetch first 10 rows only

    oracle:  select * from test where rownum<=10

最新文章