首页 > 解决方案 > liquibase 不会在 Oracle DB 12c 上创建 autoIncrement 列

问题描述

所以我在 Oracle Database 12c 上使用 liquibase 3.8.5 版。我想要做的是以这种方式创建一个表:

<createTable tableName="a_table">
    <column name="id" type="int" autoIncrement="true">
        <constraints primaryKey="true" nullable="false" />
    </column>
    <column name="name" type="nvarchar(255)">
        <constraints nullable="false" />
    </column>
    <column name="value" type="nvarchar(255)">
        <constraints nullable="false" />
    </column>
</createTable>

创建表后,我试图以这种方式填充它:

<changeSet id="change_set" author="author"
    context="a_context">
    <insert tableName="a_table">
        <column name="name" value="NAME1" />
        <column name="value"
            value="VALUE1" />
    </insert>
</changeSet>

它甚至似乎无法创建一个 autoIncrement 表。可能是什么问题?我得到的错误是:

java.util.NoSuchElementException: Migration failed for change set path/to/my.xml::change_set::author:
     Reason: liquibase.exception.DatabaseException: ORA-01400: cannot insert NULL into ("XXX"."A_TABLE"."ID")
[Failed SQL: (1400) INSERT INTO XXX.a_table (name, value) VALUES ('NAME1', 'VALUE1')]

我已经通过互联网搜索,但找不到任何东西。数据库是 12c 版本,使用直接 sql 代码手动创建此表,并且 IDENTITY 具有相同的插入 sql 确实有效。

我究竟做错了什么?

编辑:经过更多研究,liquibase 似乎无法将代码正确传输到 Oracle sql 中。这是关于创建表的信息:

[INFO ] 2020-02-03 12:12:11.650 [localhost-startStop-1] l.e.j.JdbcExecutor:42 - CREATE TABLE XXX.a_table (id INTEGER NOT NULL, name NVARCHAR2(255) NOT NULL, value NVARCHAR2(255) NOT NULL, CONSTRAINT PK_A_TABLE PRIMARY KEY (id))
[INFO ] 2020-02-03 12:12:11.713 [localhost-startStop-1] l.c.ChangeSet:42 - Table a_table created

标签: oraclenullliquibase

解决方案


推荐阅读