`
koreyoshi
  • 浏览: 237426 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle程序升级db2

阅读更多

最近段时间忙于升级(如题),在连续5天的加班下,终于迎来了今天的总结.

整个升级过程当然是很痛苦的,在这期间,我主要处理了两件事:

1)修改数据库脚本;

2)测试程序,找到兼容解决方案.

 

主要说下数据库的升级

 a)数据库类型差异

 

      date类型参考http://koreyoshi.iteye.com/blog/1604045

      db2中日期转换     date类型转timestamp   to_char(date,'yyyy-MM-dd')

                                 timestamp类型转date   to_date(char(datetime),'yyyy-MM-dd')

       数值类型建议全部使用decimal

 b)like语句中不能使用变量,可以用locate函数解决参考http://koreyoshi.iteye.com/blog/1586310

     au.hall.org.hiberarchy like o.hiberarchy||'%'等同于
     locate(o.hiberarchy,au.hall.org.hiberarchy)=1;


      au.hall.org.hiberarchy like '%'||o.hiberarchy||'%'等同于
       locate(o.hiberarchy,au.hall.org.hiberarchy)>0;


       au.hall.org.hiberarchy like '%'||o.hiberarchy等同于
        lcoate(o.hiberarchy,au.hall.org.hiberarchy)=-1;

 

        au.hall.org.hiberarchy like o.hiberarchy||'-%'等同于
        lcoate(o.hiberarchy||'-',au.hall.org.hiberarchy)=1;

 

  c)数据库语法汇总:
 1.alter...add..语句不能带括号,具体请看下面例子(add后面的不能用括号)
  alter table cmcs3_bank_account add (LEVEL_  DECIMAL(2))  ;

 

2.alter...modify..语句要改成如下:
alter table APP_FI_OPP_SUBJECT modify REMARK_ VARCHAR(500);
改成
alter table APP_FI_OPP_SUBJECT alter column REMARK_ set data type VARCHAR(500);

 

3.alter...add..语句一次添加多个字段如下:
       alter table cmcs.FW_SCHEDULE
 add column BeginExePeriodHour_ DECIMAL(2)  
 add column BeginExePeriodMinute_ DECIMAL(2)

 

4.alter..add..语句不能直接添加非空字段,可以给个默认值

 

5.insert 语句中的to_timestamp 改成to_date

 

6.给表字段增加非空约束
   ALTER TABLE CMCS.CMCS3_BANK_ACCOUNT ALTER COLUMN ISBANKCOLLECTION_  SET NOT NULL;

 

7.oracle 复制表与db2的差别:
 oarcle:create table TEMP AS select * from APPTABLE;
 DB2:create table TEMP like APPTABLE;
     insert into TEMP select * from APPTABLE;

 

8.date日期格式的字段,insert时直接如下格式的值:'2012-02-15' 

 

9.设置非空字段为空用下面语法
    alter table APP_FI_CHECK_BILL alter column CHECKAMOUNT_ drop not null;
    reorg table  APP_FI_CHECK_BILL ;

 

10.db2 获取系统时间 current time, current date, current timestamp

 

11.db2 执行存储过程 call 过程名

 

12.db2 中不允许对表字段重命名

可以采用的方法是:这里假设lastupdate是timestamp类型

alter table xxxtable add column lastupdate_ date;

update xxxtable set lastupdate_ = to_char(lastupdate,'yyyy-MM-dd');

alter table xxxtable drop column lastupdate;

alter table xxxtable add column lastupdate date;

update xxxtable set lastupdate =lastupdate_;

alter table xxxtable drop column lastupdate_;

reorg table xxxtable;

 

13.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下报错

 

14.replace关键字
oracle支持,DB2不支持。create or replace语句在DB2下是非法的


15.子查询别名
ORACLE 支持select * from(子查询) 或者 select * from(子查询) t

DB2 支持select * from(子查询) t 或者 select * from(子查询) as t


固兼容的写法是select * from(子查询) t


16.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' ,无须使用字符串转日期函数


18.分页的处理
如果采用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


19.decode函数
decode函数在DB2不被支持,兼容的写法是采用case when


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


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

都没有问题

 

 

整理的比较杂乱,主要是供以后自己参考,若以后还有机会升级.会更详细更全面更好的归类整理

分享到:
评论

相关推荐

    Sybase_Replication_Server_15.0.1适用于_IBM_AIX

    它能让DBA快速设置数据冗余的灾难备份系统,和异构数据库平台的数据同步,如Sybase ASE, Oracle, IBM DB2 and Microsoft. SQL Server。通过方便的数据移动和同步,应用程序可以在需要的时候、需要的地点得到其它应用...

    SJ Editor v1.0 (源代码编辑器)

    IBM DB2 Version 5 Informix Online Server 7.22 Interbase 5.0 Microsoft Access 97 Microsoft SQL Server 6.5 Oracle 8.0.0.0 Sybase Adaptive Enterprise 12.0 ●Basic(Visual Basic and Script), ●C++, ●Perl...

    最新Delphi XE2 正式版破解程序

    使用 FireMonkey,Delphi和C++Builder开发人员能开发出视觉绚丽的高清和3D应用程序,并与后台的企业级数据库如Oracle、微软 SQL Server、IBM DB2、Sybase和其他数据库互联互通。FireMonkey应用以原生方式运行在...

    Sqlite数据库支持库2.0#0版(静态版)

    相对于其它非本地数据库,如Oracle、DB2、MS SQL Server、MySQL、PostgreSQL,Sqlite数据库具有小巧、速度快的优势。内部使用的Sqlite版本是3.2.5。本支持库将只为向后兼容而存在,不会再有版本升级,推荐使用...

    Sqlite3数据库支持库2.0#2版(静态版)

    相对于其它非本地数据库,如Oracle、DB2、MS SQL Server、MySQL、PostgreSQL,Sqlite数据库具有小巧、速度快的优势。目前使用的Sqlite版本是3.6.11,只要有可能,将随时跟踪并升级至Sqlite最新版本。数据库内部文本...

    Sqlite数据库支持库2.0#0版

    相对于其它非本地数据库,如Oracle、DB2、MS SQL Server、MySQL、PostgreSQL,Sqlite数据库具有小巧、速度快的优势。内部使用的Sqlite版本是3.2.5。本支持库将只为向后兼容而存在,不会再有版本升级,推荐使用...

    Linux环境数据库管理员指南

    6.6 配置DB2客户机与DB2服务器通信 188 6.7 小结 194 6.8 常见问答 195 第7章 在Linux上安装MySQL 198 7.1 引言 198 7.2 安装 199 7.2.1 命名约定 199 7.2.2 二进制分发包的安装 201 7.2.3 RPM 分发包的安装 202 ...

    dcm4chee-arc-light:DICOM存档J2EE应用程序

    从长远来看,5.x将提供2.x的功能,并且将有迁移工具将2.x的现有安装升级到5.x。建造确保已安装 。 构建master分支-仅用于构建未发行版本,该版本在Maven存储库中尚不可用: &gt; $git clone ...

    mygeneration代码生成工具

    Oracle IBM DB2 Microsoft Access MySQL PostgreSQL Firebird Interbase SQLite VistaDB Advantage IBM iSeries CSV & other delimited text files 2.支持重用和include文件 3.Ability to single step through all ...

    Sqlite3数据库支持库2.1版(sqlite3.fne)-易语言

    相对于其它非本地数据库,如Oracle、DB2、MS SQL Server、MySQL、PostgreSQL,Sqlite数据库具有小巧、速度快的优势。 目前使用的Sqlite版本是3.7.11,只要有可能,将随时跟踪并升级至Sqlite最新版本。 数据库...

    StarSuit商务办公全方位解决方案八套件 v3.8

    1. 优质:StarSuit有着优异的性能,运行速度快,大型数据库保障了数据安全(您可选择使用SQL Server/Sysbase/Oracle/DB2等作为您的后台数据库)。免费使用半年更是以信誉作为保障,您看清楚、用明白、有了实际的管理...

    Sqlite数据库支持库2.0版(SqliteDB.fne)-易语言

    相对于其它非本地数据库,如Oracle、DB2、MS SQL Server、MySQL、PostgreSQL,Sqlite数据库具有小巧、速度快的优势。 内部使用的Sqlite版本是3.2.5。本支持库将只为向后兼容而存在,不会再有版本升级,推荐使用...

    DataPower

    数据库:mysql4.12/oracle10g/db2 v8/sqlserver2005/sybase 五, DataPower对用户的承诺 1、 不需要写一行代码 2、 会html代码会做的更专业 3、 可灵活定制自己想要的系统,从视图到数据都可自定义。 ...

    易语言-Sqlite3数据库支持库2.1#0版(静态版)

    相对于其它非本地数据库,如Oracle、DB2、MS SQL Server、MySQL、PostgreSQL,Sqlite数据库具有小巧、速度快的优势。 目前使用的Sqlite版本是3.7.11,只要有可能,将随时跟踪并升级至Sqlite最新版本。 数据库内部...

Global site tag (gtag.js) - Google Analytics