Команда послідовність create sequence oracle - мова запитів sql

Послідовність CREATE SEQUENCE Oracle

ПоследовательностьCREATE SEQUENCE - це об'єкт бази даних, який генерує цілі числа відповідно до правил, встановлених під час його створення. Для послідовності можна вказувати як позитивні, так і негативні цілі числа. У системах баз даних послідовності застосовують для самих різних цілей, але в основному для автоматичної генерації первинних ключів. Проте до первинному ключу таблиці послідовність ніяк не прив'язана, так що в певному сенсі вона є ще й об'єктом колективного користування. Якщо первинний ключ потрібен лише для забезпечення унікальності, а не для того, щоб нести певний сенс, послідовність є відмінним засобом.

Послідовність створюється командою CREATE SEQUENCE.

CREATE SEQUENCE

Команда послідовність create sequence oracle - мова запитів sql

Синтаксис команди CREATE SEQUENCE

Синтаксис команди CREATE SEQUENCE

Основні ключові слова і параметри CREATE SEQUENCE.

  • schema -схема, в якій створюється послідовність. Якщо schema опущена, Oracle створює послідовність у схемі користувача.
  • sequence - ім'я створюваної послідовності
  • startwith- дозволяє творцю послідовності вказані першими генерується нею значення. Після створення послідовність генерує вказане в start with значення при першій посиланням на її віртуальний стовпець NEXTVAL
  • increment by n - визначає приріст послідовності при кожному посиланні на віртуальний стовпець NEXVAL. Якщо значення не вказано явно, за замовчуванням встановлюється 1. Для зростаючих послідовностей встановлюється позитивне n, для відбувають, або послідовностей із зворотним відліком - негативне
  • minvalue - визначає мінімальне значення, що створюється послідовністю. Якщо воно не вказано, Oracle застосовує значення за замовчуванням NOMINVALUE
  • nominvalue - вказує, що мінімальне значення дорівнює 1, якщо послідовність зростає, або -10 26. якщо послідовність убуває
  • maxvalue - визначає максимальне значення, що створюється послідовністю. Якщо воно не вказано, Oracle застосовує значення за замовчуванням NOMAXVALUE
  • nomaxvalue - вказує, що максимальне значення дорівнює 10 27. якщо послідовність зростає, або -1, якщо послідовність убуває. За замовчуванням приймається NOMAXVALUE
  • cycle - дозволяє послідовності повторно використовувати створені значення при досягненні MAXVALUE або MINVALUE. Тобто послідовність буде продовжувати генерувати значення після досягнення свого максимуму або мінімуму. Зростаюча послідовність після досягнення свого максимуму генерує свій мінімум. Зростаючий послідовність після досягнення свого мінімуму генерує свій максимум. Якщо циклічний режим небажаний або не встановлений явно, Oracle застосовує значення за замовчуванням - NOCYCLE. Вказувати CYCLE разом з NOMAXVALUE або NOMINVALUE не можна. Якщо потрібна циклічна послідовність, необхідно вказати MAXVALUE для зростаючої послідовності або MINVALUE - для спадної
  • nocycle - вказує, що послідовність не може продовжувати генерувати значення після досягнення свого максимуму або мінімуму
  • cachen - вказує, скільки значень послідовності ORACLE розподіляє заздалегідь і підтримує в пам'яті для швидкого доступу. Мінімальне значення цього параметра дорівнює 2. Для циклічних послідовностей це значення має бути менше, ніж кількість значень в циклі. Якщо кешування небажано або не встановлено явно, Oracle застосовує значення за замовчуванням - 20 значень.
  • order - гарантує, що номери послідовності генеруються в порядку запитів. Ця опція може використовуватися, наприклад, коли номери послідовності постають як відміток часу. Гарантування порядку зазвичай не суттєво для тих послідовностей, які використовуються для генерації первинних ключів. Якщо впорядкування небажано або не встановлено явно, Oracle застосовує значення за замовчуванням NOORDER
  • noorder - не гарантує, що номери послідовності генеруються в порядку запитів

Приклад 1 CREATE SEQUENCE
Створення послідовності sequence_1.s Перше звернення до цієї послідовності поверне 1. Друге звернення поверне 11. Кожне наступне звернення поверне значення, на 10 більше попереднього:

Приклад 2 CREATE SEQUENCE
Створення послідовності sequence_2. Послідовність спадна, циклічна, при досягненні нуля послідовність знову звертається до старшого числу. Такий послідовністю зручно користуватися в тих програмах, де до настання деякої події повинен бути виконаний зворотний відлік:

Після створення послідовності до неї можна звертатися через псевдостолбци CURRVAL (повертає поточне значення послідовності) і NEXTVAL (виконує приріст послідовності і повертає її в такому значенні). Поточне і наступне значення послідовності користувачі бази даних отримують, виконуючи команду SELECT. Послідовності - не таблиці, а прості об'єкти, що генерують цілі числа за допомогою віртуальних стовпців, тому потрібна загальнодоступна таблиця словника даних DUAL. з якої будуть вилучатись дані віртуальних стовпців.

Перше звернення до NEXTVAL повертає початкове значення послідовності. Наступні звернення до NEXTVAL змінюють значення послідовності на приріст, яке було визначено, і повертають нове значення. Будь-яке звернення до CURRVAL завжди повертає поточне значення послідовності, а саме, то значення, яке було повернуто останнім зверненням до NEXTVAL. Перш ніж звертатися до CURRVAL в поточному сеансі роботи, необхідно хоча б один раз виконати звернення до NEXTVAL.

В одному реченні SQL приріст послідовності може бути виконано тільки один раз. Якщо пропозиція містить кілька звернень до NEXTVAL для однієї і тієї ж послідовності, то ORACLE нарощує послідовність один раз, і повертає одне і те ж значення для всіх входжень NEXTVAL. Якщо пропозиція містить звернення як до CURRVAL. так і до NEXTVAL. то ORACLE нарощує послідовність і повертає одне і те ж значення як для CURRVAL. так і для NEXTVAL. незалежно від того, в якому порядку вони зустрічаються в реченні.

До однієї і тієї ж послідовності можуть звертатися одночасно кілька користувачів, без будь-якого очікування або блокування:

<имя последовательности>.CURRVAL

<имя последовательности>.NEXTVAL

Щоб звернутися до поточного або наступного значенням послідовності, що належить схемі іншого користувача, користувач повинен мати або об'єктну привілей SELECT по цій послідовності, або системну привілей SELECT ANY SEQUENCE. і повинен додатково кваліфікувати цю послідовність ім'ям містить її схеми:

Значення CURRVAL і NEXTVAL використовуються в наступних місцях:

  • в списку SELECT пропозиції SELECT
  • в фразі VALUES пропозиції INSERT
  • в фразі SET пропозиції UPDATE.

Не можна використовувати значення CURRVAL і NEXTVAL в наступних місцях:

  • в підзапиті
  • в реченні SELECT з оператором DISTINCT
  • в реченні SELECT з фразою GROUP BY або ORDER BY
  • в реченні SELECT. об'єднаному з іншою пропозицією SELECT оператором множин UNION
  • в фразі WHERE пропозиції SELECT
  • в замовчує (DEFAULT) значенні стовпця в реченні CREATE TABLE або ALTER TABLE
  • в умови обмеження CHECK.

SELECT SEQUENCE. Приклад 3.
Дія циклічної послідовності sequence _2 при досягненні нею значення MINVALUE:

SQL> SELECT sequence_2.NEXTVAL FROM dual;

INSERT INTO emp VALUES (empseq.nextval, 'LEWIS', 'CLERK', 7902, SYSDATE, 1200, NULL, 20);
UPDATE emp SET deptno = empseq.currval WHERE ename = 'Jones'

ALTER SEQUENCE. Приклад 6.
Будь-параметр послідовності можна змінити командою ALTER SEQUENCE. Нове значення набуває чинності негайно. Всі параметри послідовності, які не вказані в команді ALTER SEQUENCE, залишаються без змін:

ALTER SEQUENCE sequence_2

Коли послідовність більше не потрібна, її можна видалити. Для цього адміністратор бази даних або власник послідовності повинен виконати команду DROP SEQUENCE. В результаті віртуальні стовпці послідовності NEXVAL і CURRVAL - переводяться в розряд невикористовуваних. Але, якщо послідовність застосовувалася для генерації значень первинних ключів, створені нею значення залишаться в базі даних. Каскадного видалення значень, згенерованих послідовністю, при її видаленні не відбувається.

DROP SEQUENCE. Приклад 7.
Видалення послідовності SEQUENCE:

Схожі статті