SAP Підручник HANA: створення послідовності
⚡ Розумний підсумок
Створити послідовність у SAP HANA визначає об'єкт бази даних, який автоматично генерує інкрементований список числових значень. Параметри контролюють початкове значення, приріст, обмеження, циклічність та поведінку генератора під час кешування.
Що таке послідовність?
Послідовність — це об’єкт бази даних, який автоматично створює збільшений список числових значень відповідно до правила, зазначеного в специфікації послідовності.
Наприклад, щоб автоматично вставити номер співробітника в стовпець (EMPLOYEE_NO) таблиці, коли в таблицю вставляється новий запис, ми використовуємо послідовність.
Значення послідовності генеруються в порядку зростання або спадання.
Послідовності не пов'язані з таблицями; вони використовуються програмою. Є два значення в послідовності –
- CURRVAL – надає поточне значення послідовності.
- NEXTVAL – надати наступне значення послідовності.
СИНТАКС
CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]
СИНТАКСИЧНІ ЕЛЕМЕНТИ
| ЕЛЕМЕНТИ | ОПИС |
|---|---|
| Це назва послідовності. | |
| [ ] | Він визначає один або кілька параметрів послідовності. |
| ПОЧИНАТИ З | Він описує початкове значення послідовності. |
| ЗБІЛЬШИТИ НА | Це визначає значення, яке буде збільшено з останнього значення, призначеного для кожного разу, коли генерується нове значення послідовності. За замовчуванням 1. |
| MAXVALUE | Це визначає максимальне значення, яке може бути згенероване послідовністю. може бути між -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;
Тут ми будемо використовувати об’єкт «sequence» у наведеному нижче прикладі, щоб збільшити значення Emploee no на +1 кожного разу, коли виконується запит на вибірку. У запиті «nextval» можна використовувати для створення серійного номера або того самого типу вимоги.
Використання послідовності –
SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;
ВИВІД – 100, 101, 102 … і так далі для кожного виконання вищезазначеного запиту на вибірку.
Як використовувати послідовність у таблиці
Наведений вище приклад повертає число, але ніде його не зберігає. Три шаблони пов'язують послідовність з реальними даними, і правильний вибір залежить від того, наскільки великий контроль потрібен застосунку.
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 HANA SQL та визначення стовпців у SAP Типи даних HANA.

