1

我们正在使用 liquibase 在 Oracle 中创建和管理表。从表中创建具有 ID 列最大值的序列时出现问题。在 liquibase 中,我尝试了以下方法。

<sql>Create Sequence id_sequence starts with (Select max(id) from tableName)</sql>

它显示无效号码错误。我认为这是由于选择查询不返回数字。我也尝试编号并得到以下相同的错误

<sql>Create Sequence id_sequence starts with TO_NUMBER((Select max(id) from tableName))</sql>

有没有办法避免 liquibase 出现这个错误。我没有找到基于 liquibase 的解决方案。所以我在这里问

4

1 回答 1

1

我不知道 Liquibase,但是 - 当你用 Oracle 标签标记它时,它就不会那样工作。

先选择MAX值,然后在CREATE SEQUENCE. 您将需要动态 SQL。这是一个例子:

SQL> declare
  2    l_max number;
  3  begin
  4    select max(deptno) into l_max from dept;
  5
  6    execute immediate 'create sequence id_sequence start with ' || l_max;
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> select id_sequence.nextval from dual;

   NEXTVAL
----------
        40

SQL> select id_sequence.nextval from dual;

   NEXTVAL
----------
        41

SQL>
于 2019-10-03T11:29:52.297 回答