当第一次在数据库上运行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 datatypeOracle9i没有时间戳数据类型( Oracle的后期版本)。
有没有一种方法可以让Liquibase使用不同的数据类型,或者告诉Liquibase它正在使用早期版本的Oracle?
还是我运气不好,因为Liquibase不支持Oracle9i?
编辑: Oracle9i确实有时间戳数据类型,但是我的数据库运行在8i兼容模式下,很不幸,这种情况不能改变。问题仍然存在。
发布于 2012-08-30 04:07:48
我想出的解决方案是使用日期数据类型手动创建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);https://stackoverflow.com/questions/12188908
复制相似问题