SAP Підручник HANA: створення послідовності

⚡ Розумний підсумок

Створити послідовність у SAP HANA визначає об'єкт бази даних, який автоматично генерує інкрементований список числових значень. Параметри контролюють початкове значення, приріст, обмеження, циклічність та поведінку генератора під час кешування.

  • 🔢 Основне визначення: Послідовність генерує числа відповідно до правила, встановленого в її специфікації, за зростанням або спаданням.
  • 🔗 Без прив'язки до таблиці: Послідовності – це незалежні об'єкти, що використовуються застосунком, а не приєднані до будь-якої таблиці.
  • 📍 Дві цінності: CURRVAL повертає поточне значення, а NEXTVAL переміщує послідовність у наступному положенні та повертає нове.
  • 🎚️ Ключові параметри: START WITH, INCREMENT BY, MAXVALUE, MINVALUE, CYCLE та CACHE формують вихідний результат.
  • ♻️ Велоспорт: ЦИКЛ перезапускає нумерацію з граничного значення; НІ ЦИКЛУ є значенням за замовчуванням і натомість викликає помилку.
  • Кешування: КЕШ резервує блок чисел для кожного вузла для пришвидшення; NO CACHE – це значення за замовчуванням.
  • 🔄 Параметр скидання: RESET BY виконує підзапит після перезапуску бази даних та відновлює роботу з повернутого значення.

Створити послідовність у SAP ХАНА

Що таке послідовність?

Послідовність — це об’єкт бази даних, який автоматично створює збільшений список числових значень відповідно до правила, зазначеного в специфікації послідовності.

Наприклад, щоб автоматично вставити номер співробітника в стовпець (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.

Поширені запитання

Відкат транзакцій, втрата кешованих блоків під час перезапуску та одночасні сесії створюють прогалини. Послідовність гарантує унікальність, а не безперервний цикл значень.

Так. Послідовність не залежить від жодної таблиці, тому з неї можуть черпати дані кілька таблиць. Це корисно, коли ідентифікатори мають бути унікальними по всій схемі, а не для кожної таблиці окремо.

Так. Аналіз пропускної здатності вставки показує, скільки значень вузол споживає між перезавантаженнями, що збалансовує приріст швидкості кешування з розміром створюваних ним проміжків.

Так. Порівняння поточних значень з MAXVALUE та коефіцієнтом споживання передбачає виснаження, тому послідовність розширюється до того, як вставки почнуть зазнавати невдачі у виробництві.

Оскільки NEXTVAL не викликався в поточному сеансі, CURRVAL повідомляє значення, видане в цьому сеансі, тому йому нічого не повідомляти, доки воно не буде прийнято.

Підсумуйте цей пост за допомогою: