1. Конструкция CREATE SEQUENCE - пример использования в CelestaSql.
Имеется следующая гранула (В остальных примерах будет использована она и тот же sequence).
CREATE GRAIN sequences version '1.0';
CREATE SEQUENCE idNumerator START WITH 3;
После запуска Celesta в БД будет создан sequence с именем idNumerator.
Обратите внимание на особенности конструкции CREATE SEQUENCE:
1. Не поддерживается в версиях MSSQL ниже 2011.
2. Если не указано значение MINVALUE, то оно автоматически выставляется равным значению START WITH (по умолчанию 1).
3. Если не указано значение MAXVALUE, то оно автоматически выставляется равным значению java.lang.Long.MAX_VALUE.
4. Значение START WITH не обновляется для созданных ранее последовательностей, даже если было изменено в файле гранулы (связано с тем, что oracle разрешает данную операцию только через удаление и пересоздание последовательности, а идеология celesta не предусматривает удаление statefull объектов из БД).
5. Если в грануле присутствует таблица с именем, например, A, то является недопустимым создание последовательности с именем A_seq, так как это имя зарезервировано системой.
2. Класс доступа Sequence.
Данный класс имеет всего один метод доступа к данным - nextValue.
Ниже приведен пример кода на языке python.
from sequences._sequences_orm import idNumeratorSequence
idNumerator = idNumeratorSequence(context)
id = idNumerator.nextValue()
3. Автоинкремент полей типа INT при помощи выражения DEFAULT NEXTVALUE(sequenceName).
Допустим, имеется таблица (для данного примера оставим в ней единственное поле id).
CREATE TABLE customTable (
id int DEFAULT NEXTVAL(idNumerator) not null,
CONSTRAINT pk_customTable PRIMARY KEY (id)
);
Таким образом, по умолчанию, значение колонки id будет находиться под управлением последовательности idNumerator.
Обратите внимание на особенности выражения DEFAULT NEXTVALUE(sequenceName):
1. Можно использовать только последовательности, объявленные в той же грануле, что и таблица, к которой принадлежит колонка.
С уважением, разработчики платформы Курс