首次在数据库上运行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兼容模式下运行,不幸的是无法更改。问题仍然存在。
答案 0 :(得分:2)
我想出的解决方案是使用日期数据类型手动创建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);