2012-08-30 83 views
0

第一次在數據庫上運行Liquibase時,它將嘗試創建兩個用於管理其變更集的表。如何更改Liquibase自己的表的數據類型

當我在我的Oracle9i數據庫運行Liquibase它試圖創建下表:

CREATE TABLE myuser.DATABASECHANGELOG (
    ID VARCHAR2(63) NOT NULL, 
    AUTHOR VARCHAR2(63) NOT NULL, 
    FILENAME VARCHAR2(200) NOT NULL, 
    DATEEXECUTED TIMESTAMP NOT NULL, 
    ORDEREXECUTED INTEGER NOT NULL, 
    EXECTYPE VARCHAR2(10) NOT NULL, 
    MD5SUM VARCHAR2(35), 
    DESCRIPTION VARCHAR2(255), 
    COMMENTS VARCHAR2(255), 
    TAG VARCHAR2(255), 
    LIQUIBASE VARCHAR2(20), 
    CONSTRAINT PK_DATABASECHANGELOG PRIMARY KEY (ID, AUTHOR, FILENAME) 
); 

我得到這個錯誤/異常:

java.sql.SQLSyntaxErrorException: ORA-00902: invalid datatype 

Oracle9i中不具有TIMESTAMP數據類型(Oracle的更高版本可以)。

有沒有辦法讓Liquibase使用不同的數據類型,或告訴Liquibase它正在使用早期版本的Oracle?

還是我運氣不好,因爲Liquibase不支持Oracle9i?

編輯:Oracle9i中確實有時間戳數據類型,但我的數據庫在8i中兼容模式下運行,並且不能更改不幸。問題依然存在。

回答

2

我想出的解決方案是使用date數據類型手動創建DATABASECHANGELOG表和DATABASECHANGELOGLOCK表。

CREATE TABLE myuser.DATABASECHANGELOG (
    ID VARCHAR2(63) NOT NULL, 
    AUTHOR VARCHAR2(63) NOT NULL, 
    FILENAME VARCHAR2(200) NOT NULL, 
    DATEEXECUTED DATE NOT NULL, 
    ORDEREXECUTED INTEGER NOT NULL, 
    EXECTYPE VARCHAR2(10) NOT NULL, 
    MD5SUM VARCHAR2(35), 
    DESCRIPTION VARCHAR2(255), 
    COMMENTS VARCHAR2(255), 
    TAG VARCHAR2(255), 
    LIQUIBASE VARCHAR2(20), 
    CONSTRAINT PK_DATABASECHANGELOG PRIMARY KEY (ID, AUTHOR, FILENAME) 
); 

CREATE TABLE myuser.DATABASECHANGELOGLOCK (
    ID INTEGER NOT NULL, 
    LOCKED NUMBER(1) NOT NULL, 
    LOCKGRANTED DATE, 
    LOCKEDBY VARCHAR2(255), 
    CONSTRAINT PK_DATABASECHANGELOGLOCK PRIMARY KEY (ID) 
); 

你還需要記錄插入鎖表:

INSERT INTO myuser.DATABASECHANGELOGLOCK (ID, locked, lockgranted, lockedby) VALUES (1, 0, NULL, NULL);