db2的项目迁移到oracle

db2中表的自增的主键,迁移到oracle时候,需要去创建sequence,并且需要去修改ibatis中的insert,因为在db2中主键为自增的,insert语句中不需要有主键那列,而在oracle中需要有主键那列,其值为XXXX.SEQ_TABLE_ID.nextval  其中XXXX.SEQ_TABLE_ID.nextval为主键的sequence

db2中创建的表,时间字段为timestamp类型的,可以定义其默认值为当前时间,定义方法如下:

 

create table XXXX.TABLENAME

(

    TABLE_ID        INTEGER                not null generated by default as identity

      (

          start with 1,

          increment by 1

      ),

   COL1 VARCHAR(255)           not null,

   COL2 VARCHAR(255)           not null,

   COL3_CREATE_TIME TIMESTAMP              not null with default current timestamp,

   COL4_EXPIRE_TIME TIMESTAMP              not null,

   COL5    INTEGER                not null,

   constraint  PK_TABLENAME  primary key ( TABLE_ID )

);

其中的COL3_CREATE_TIME定义为timestamp类型,默认值为当前时间,这样在db2中向表中插入数据时候不需要此列。

在oracle中没有找到怎么将timestamp类型设置为默认值是当前时间,所以将表定义语句修改为

 

create table XXXX.TABLENAME

(

    TABLE_ID        INTEGER                not null ,

   COL1 VARCHAR(255)           not null,

   COL2 VARCHAR(255)           not null,

   COL3_CREATE_TIME TIMESTAMP              not null,

   COL4_EXPIRE_TIME TIMESTAMP              not null,

   COL5    INTEGER                not null,

   constraint PK_TABLENAME primary key ( TABLE_ID )

);

 

这样在插入数据的时候,需要添加上COL3_CREATE_TIME这个字段,其值为CURRENT_TIMESTAMP ibatis中需要的写法如下:

<insert id="insertXXXXXXXXXXXXXXX">

       <![CDATA[

       INSERT INTO XXXX.TABLENAME ( TABLE_ID , COL1, COL2,

       COL3_CREATE_TIME, COL4_EXPIRE_TIME, COL5 )

       values(

XXXX.SEQ_TABLE_ID.nextval, #XX#, #XX#, CURRENT_TIMESTAMP, #XX#, #XX#)

 

       ]]>

    </insert>在其中用CURRNET_TIMESTAMP获取当前时间。形式为 2009-10-13 14:39:33.921

 

 

定义字段默认值为空且not null的写法如下

create table XXXX.TABLENAME  (

   TABLE_ID               INTEGER                       not null,

   COL1          VARCHAR2(255)                   default '' not null,

   constraint PK_ TABLENAME primary key (TABLE_ID)

);

 

db2的数据库中的数据以表为单位导入到oracle中去的时候,最好的办法是用Eclipse中自带的数据库连接工具导出再导入即可。这样可以解决数据中的timestamp导入的问题。

 oracle中创建sequence的语句如下:

 

create sequence XXXX.SEQ_TABLE_ID

minvalue 1

nomaxvalue

start with 1

increment by 1

nocache

order;

db2和oracle还有以下区别:

db2 中使用 UCASE Oracle 中使用 UPPER 。db2的项目的ibatis可以使用AS,oracle中必须将as去掉。

 在db2中插入timestamp类型的数据时候,直接在values中写'2009-08-30 12:50:44.531'即可,在oracle中需要在对应的列填写TO_TIMESTAMP('2009-08-30 12:50:44.531','YYYY-MM-DD HH24:MI:SS.FF')

 

 

 

你可能感兴趣的:(db2迁移到oracle)