0

初めてデータベースで Liquibase を実行すると、変更セットを管理するために使用する 2 つのテーブルを作成しようとします。

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 に別のデータ型を使用させるか、以前のバージョンの Oracle で動作していることを Liquibase に伝える方法はありますか?

それとも、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 に答える