我们正在使用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的解决方案。所以我问这里
答案 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>