从 table 创建具有最大行值的序列 - Oracle with Liquibase
Create a sequence with maximum row value from a table - Oracle with Liquibase
我们正在使用 liquibase 在 Oracle 中创建和管理 table。我在从 table 创建 ID 列最大值的序列时遇到问题。在 liquibase 中,我尝试了以下方法。
<sql>Create Sequence id_sequence starts with (Select max(id) from tableName)</sql>
显示无效数字错误。我认为这是由于 select 查询没有 return 一个数字。我也尝试编号并得到以下相同的错误
<sql>Create Sequence id_sequence starts with TO_NUMBER((Select max(id) from tableName))</sql>
有没有办法用 liquibase 避免这个错误。我找不到基于 liquibase 的解决方案。所以我在这里问
我不知道 Liquibase,但是 - 当您用 Oracle 标签标记它时,它就不会那样工作。
Select 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>
我们正在使用 liquibase 在 Oracle 中创建和管理 table。我在从 table 创建 ID 列最大值的序列时遇到问题。在 liquibase 中,我尝试了以下方法。
<sql>Create Sequence id_sequence starts with (Select max(id) from tableName)</sql>
显示无效数字错误。我认为这是由于 select 查询没有 return 一个数字。我也尝试编号并得到以下相同的错误
<sql>Create Sequence id_sequence starts with TO_NUMBER((Select max(id) from tableName))</sql>
有没有办法用 liquibase 避免这个错误。我找不到基于 liquibase 的解决方案。所以我在这里问
我不知道 Liquibase,但是 - 当您用 Oracle 标签标记它时,它就不会那样工作。
Select 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>