从表中创建具有最大行值的序列-具有Liquibase的Oracle

时间:2019-10-03 11:17:10

标签: spring oracle hibernate liquibase liquibase-hibernate

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

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

它显示一个无效的数字错误。我认为是由于select查询没有返回数字。我还尝试编号,并在以下内容中得到相同的错误

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

是否有办法避免liquibase出现此错误。我找不到基于liquibase的解决方案。所以我问这里

1 个答案:

答案 0 :(得分: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>