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 generatedby defaultas 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  primarykey ( 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中需要的寫法如下:

<insertid="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'' notnull,

   constraint PK_ TABLENAME primarykey (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')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章