Создать последовательность с максимальным значением строки из таблицы - Oracle с Liquibase - PullRequest
1 голос
/ 03 октября 2019

Мы используем liquibase для создания и управления таблицами в Oracle. У меня проблема при создании последовательности с максимальным значением столбца идентификатора из таблицы. В 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. Я не нахожу решение на основе ликвидазы. Поэтому я спросил здесь

1 Ответ

1 голос
/ 03 октября 2019

Я не знаю 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>
...