Последовательность Oracle

Стас Белков

Стас Белков

Автор статьи. Известный специалист в мире IT. Консультант по продуктам и решениям Oracle. Практикующий программист и администратор баз данных. Подробнее.

Oracle использует генератор последовательностей для автоматической генерации уникальной последовательности чисел, которые пользователь может применять в своих операциях. Обычно последовательности используются для создания уникальных чисел для столбца первичного ключа. Рассмотрим генерацию номеров сотрудников при вставке данных.


На заметку! Если бы пользователи вынуждены были создавать последовательные числа программно, то Oracle пришлось бы постоянно блокировать и разблокировать запись, хранящую максимальное значение таких последовательностей, чтобы гарантировать упорядоченное их возрастание. Такая блокировка приводила бы к необходимости ожидания пользователями каждого очередного значения последовательности в транзакциях. Автоматическая генерация последовательностей Oracle повышает степень параллелизма базы данных.


Доступно несколько вариантов создания последовательности. Мы используем простую последовательность vanilla, которая начинается со значения 10 000 и увеличивается каждый раз на 1. Эта последовательность никогда не будет повторяться циклически, поскольку каждый сотрудник должен иметь уникальный номер.


Важно! Существуют два псевдостолбца, именуемые currval и nextval, которые можно использовать для опроса значений последовательности. Псевдостолбец currval дает текущее значение последовательности, а nextval — новое, или следующее, значение последовательности.


Во-первых, создайте последовательность, как показано в следующем примере. Это обычный способ применения последовательности для генерации уникального первичного ключа для столбца. 

SQL> CREATE SEQUENCE employee_seq
START WITH 10000
INCREMENT BY 1
NOMAXVALUE
NOCYCLE;
Sequence created.
SQL>

Во-вторых, выберите текущий номер последовательности, используя следующий оператор:

SQL> SELECT employee_seq.currval FROM dual; 

В-третьих, вставьте новую строку в таблицу employee, используя nextval из последовательности employee_seq:

SQL> INSERT INTO employees(employee_id, first_name, last_name, email,
2 phone_number, hire_date)
3 VALUES
4* (employee_seq.nextval,'sam','alapati','salapati.tnt.org'
,345-555-5555,to_char('21-JUN-2005');
1 row created.
SQL> COMMIT;
Commit complete.
SQL> 

И, наконец, удостоверьтесь, что столбец employee_id был заполнен последовательностью employee_seq:

SQL> SELECT employee_id, first_name, last_name
FROM employees
WHERE last_name = 'alapati';
EMPLOYEE_ID   FIRST_NAME       LAST_NAME
------------- ---------------- ----------
      10011   sam              alapati
SQL> 

Обратите внимание, что можно столкнуться с последовательностью Oracle Database, возрастающей непрерывно, но в ее номерах могут быть пропуски. Это связано с тем, что база Oracle всегда сохраняет в памяти 20 значений последовательности (по умолчанию), которые получаются из nextval. Если произойдет сбой базы данных, то номера, находящиеся в памяти, теряются, и в последовательности образуется пропуск.

Вас заинтересует / Intresting for you:

Базы данных Oracle: что нужно ...
Базы данных Oracle: что нужно ... 64879 просмотров Ирина Светлова Thu, 24 Jun 2021, 20:01:45
Oracle Personal Edition
Oracle Personal Edition 5963 просмотров Надин Tue, 21 Nov 2017, 13:32:12
Oracle изменения изменений!
Oracle изменения изменений! 3103 просмотров Stas Belkov Tue, 21 Nov 2017, 13:18:46
Разница между базой данных и э...
Разница между базой данных и э... 3252 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать