SAP Учебное пособие по HANA: создание последовательности
⚡ Умное резюме
Создать последовательность в SAP HANA определяет объект базы данных, который автоматически генерирует список числовых значений с возрастающим шагом. Параметры управляют начальным значением, шагом приращения, ограничениями, цикличностью и поведением генератора при кэшировании.
Что такое последовательность?
Последовательность — это объект базы данных, который автоматически генерирует увеличенный список числовых значений в соответствии с правилом, указанным в спецификации последовательности.
Например, чтобы автоматически вставлять номер сотрудника в столбец (EMPLOYEE_NO) таблицы, когда в таблицу вставляется новая запись, мы используем последовательность.
Значения последовательности генерируются в порядке возрастания или убывания.
Последовательности не связаны с таблицами; они используются приложением. Есть два значения последовательно –
- CURRVAL – укажите текущее значение последовательности.
- NEXTVAL – укажите следующее значение последовательности.
СИНТАКСИС
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
ЭЛЕМЕНТЫ СИНТАКСИКА
| ЭЛЕМЕНТЫ | ОПИСАНИЕ |
|---|---|
| Это название последовательности. | |
| [ ] | Он определяет один или несколько параметров последовательности. |
| НАЧАТЬ С | Он описывает начальное значение последовательности. |
| ПРИРАЩЕНИЕ НА | Это определяет значение, которое будет увеличиваться по сравнению с последним значением, назначенным каждый раз, когда генерируется новое значение последовательности. Значение по умолчанию — 1. |
| МАКСИМАЛЬНОЕЗНАЧЕНИЕ | Это определяет максимальное значение, которое может быть сгенерировано данной последовательностью. может находиться в диапазоне от -4611686018427387903 до 4611686018427387902. |
| НЕТ МАКСИМАЛЬНОГО ЗНАЧЕНИЯ | Если параметр NO MAXVALUE указан, то для возрастающей последовательности максимальное значение будет равно 4611686018427387903, а минимальное значение для убывающей последовательности — -1. |
| МИНЗНАЧЕНИЕ / НЕТ МИН.ЗНАЧЕНИЯ | Он определяет минимальное значение, которое может сгенерировать последовательность. может находиться в диапазоне от -4611686018427387904 до 4611686018427387902. При использовании параметра NO MINVALUE минимальное значение для возрастающей последовательности равно 1. |
| ЦИКЛ | Директива CYCLE указывает, что порядковый номер будет перезапущен после достижения максимального или минимального значения. |
| БЕЗ ЦИКЛА | Параметр по умолчанию. Директива NO CYCLE указывает, что порядковый номер не будет перезапускаться после достижения максимального или минимального значения. |
| КЭШ | Размер кэша определяет, какой диапазон порядковых номеров будет кэшироваться в узле. должно быть беззнаковым целым числом. |
| НЕТ КЕША | Параметр по умолчанию. Директива NO CACHE указывает, что порядковый номер не будет кэшироваться в узле. |
| СБРОС ПО | Он указывает, что во время перезапуска базы данных база данных автоматически выполняет и значение последовательности перезапускается с возвращенным значением. |
Пример -
Мы создадим последовательность с именем DHK_SCHEMA.EMP_NO, которая будет увеличивать значение последовательности на +1 каждый раз, когда последовательность используется.
Сценарий последовательности –
CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;
Здесь мы будем использовать объект «последовательность» в приведенном ниже примере, чтобы увеличивать значение номера сотрудника на +1 каждый раз, когда выполняется запрос выбора. В запросе «nextval» может использоваться для генерации серийного номера или требования того же типа.
Использование последовательности –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
ВЫВОД – 100, 101, 102 … и так далее для каждого выполнения приведенного выше запроса SELECT.
Как использовать последовательность в таблице
В приведенном выше примере возвращается число, но оно нигде не сохраняется. Существует три шаблона, связывающих последовательность с реальными данными, и правильный выбор зависит от того, насколько полный контроль требуется приложению.
1) Вызовите функцию NEXTVAL напрямую в строке INSERT. Наиболее явный подход. Приложение само решает, когда будет использовано число.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE ( EMPLOYEE_NO INTEGER NOT NULL, EMP_NAME NVARCHAR(100), PRIMARY KEY (EMPLOYEE_NO) ); INSERT INTO DHK_SCHEMA.EMPLOYEE VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');
2) Используйте последовательность в качестве значения по умолчанию для столбца. Номер присваивается даже в том случае, если в операции вставки не упоминается столбец, что подходит для приложений, которые изначально не были предназначены для работы с данной последовательностью.
CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 ( EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL, EMP_NAME NVARCHAR(100) ); INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');
3) Прочитайте только что выданное значение. Функция CURRVAL возвращает последнее число, использованное в этой сессии, которое используется для связи дочерней строки с только что вставленной родительской строкой.
SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;
⚠️ Предупреждение: Функция CURRVAL завершается с ошибкой до тех пор, пока в текущей сессии не будет вызвана функция NEXTVAL хотя бы один раз. Она сообщает значение, переданное в эту сессию, а не глобальное максимальное значение, поэтому две сессии могут одновременно содержать разные текущие значения.
Столбец «Последовательность» против столбца «Идентичность»
SAP HANA также предлагает столбец идентификатора, который генерирует числа без отдельного объекта. Эти два подхода решают одну и ту же задачу по-разному.
| Параметр | Последовательность | Столбец "Идентификатор" |
|---|---|---|
| Тип объекта | Независимый объект базы данных | Свойство столбца одной таблицы |
| Общий для всех таблиц | Да, любое количество таблиц может использовать его данные. | Нет, это относится к одной колонке. |
| Значение отображается перед вставкой. | Да, через NEXTVAL. | Нет, генерируется во время вставки. |
| Определение | СОЗДАТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ | СГЕНЕРИРУЕТСЯ ПО УМОЛЧАНИЮ В КАЧЕСТВЕ ИДЕНТИФИКАТОРА |
| лучше всего для | Общая нумерация, родительские и дочерние вставки | Простой суррогатный ключ для одной таблицы |
Выберите последовательность, если номер должен быть известен до создания строки или если несколько таблиц используют одну и ту же серию нумерации. Выберите столбец идентификатора для простого суррогатного ключа, не требующего более широкого доступа.
Управление последовательностями: ALTER, DROP и пропуски
Последовательность редко остается в первоначальном виде. Три задачи по техническому обслуживанию возникают неоднократно.
Изменение поведения. Команда ALTER SEQUENCE изменяет шаг, пределы или цикличность существующей последовательности без удаления.ping Команда RESTART WITH сбрасывает счетчик, что является обычным шагом после перезагрузки тестовых данных.
ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000; ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10; DROP SEQUENCE DHK_SCHEMA.EMP_NO;
Понимание пробелов. Порядковые номера не гарантированно будут последовательными, и это удивляет тех, кто ожидает непрерывного следа в системе аудита. Пробелы возникают по трем причинам:
- Отменены транзакции. NEXTVAL не является транзакционным. Номер, использованный при вставке, которая впоследствии была отменена, никогда не перевыпускается.
- Кеширование. При использовании CACHE 100 узел резервирует одновременно сто значений. Перезапуск отбрасывает все неиспользованные значения в этом блоке.
- Параллельные сессии. В двух сессиях, вставляющих данные одновременно, числа чередуются, поэтому ни в одной из них не наблюдается непрерывного выполнения.
На практике следует рассматривать последовательность как источник уникальных идентификаторов, а не как счетчик количества существующих строк. Если непрерывная последовательность является обязательным требованием, например, для нумерации счетов-фактур, она должна генерироваться логикой приложения с собственными элементами управления, а не последовательностью базы данных.
Найти то, что существует. Системное представление SEQUENCES отображает каждую последовательность с ее текущим значением, что является самым быстрым способом проверки схемы. Соответствующий синтаксис рассматривается в [ссылка на соответствующий раздел]. SAP Хана SQL и определения столбцов в SAP Типы данных HANA.

