0

第一次在数据库上运行 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 兼容模式下运行,不幸的是不能改变。问题仍然存在。

4

1 回答 1

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);
于 2012-08-30T04:07:48.250 回答