Раздел 3. Последовательности

Полезными объектами схемы являются так называемые генераторы последовательностей (англ. SEQUENCE), называемые так же просто последовательностями. Эти объекты предназначены для создания последовательности чисел, которые обычно используются в качестве значений суррогатных ключей таблиц; функциональным аналогом последовательностей являются поля с автонумерацией, как в системах Microsoft SQL Server и т.д. Отличительными особенностями последовательностей является, во-первых, их независимость от какой-либо одной таблицы, и, во-вторых, их глобальность (потенциальная доступность всем пользователям).

Последовательность можно представить как некоторую псевдотаблицу с двумя полями NEXTVAL и CURRVAL. Обращение к первому полю создает новое целое число и возвращает его, а обращение ко второму полю возвращает последнее сгенерированное число. Для корректной работы с последовательностями необходимо в рамках одной транзакции сначала обратиться к полю NEXTVAL, а затем можно получать этот номер по полю CURRVAL. Обращение любого пользователя к полю NEXTVAL генерирует следующий номер, а обращение к полю CURRVAL всегда возвращает текущий.

Следует иметь в виду, что, поскольку к последовательности могут обращаться одновременно несколько пользователей, значения, которые поле NEXTVAL возвращает конкретному пользователю, могут идти не подряд.

При создании последовательности обычно указывается, помимо имени, начальное значение, шаг, и некоторые другие параметры. Ниже приведен пример создания последовательности.

CREATE SEQUENCE "Клиент_sec" MINVALUE 0

START WITH 0 INCREMENT BY 1

SELECT "Клиент_sec". NEXTVAL,

"Клиент_sec". CURRVAL FROM Dual

- обращение к полям NEXTVAL и CURRVAL.

Теперь расмотрим пример типичного использования последовательности. Напомним, что в рассматриваемой схеме в таблице "Клиент" поле "Код Клиента" как раз является суррогатным ключем, это же значение переносится и в таблицу "Заказ" в поле "Клиент" для моделирования связи между записями таблицы (на поле "Клиент" наложено ограничение внешнего ключа). Приводимые ниже две команды INSERT добавляют две записи в эти таблицы; для поддерживания связи между записями используется последовательность "Клиент_sec":

INSERT INTO "Клиент" VALUES

('Ада', 'Вонг', 'ж', NULL, NULL, NULL,

'Номер', "Клиент_sec".nextval)

INSERT INTO "Заказ" VALUES ('0067', DEFAULT,

"Клиент_sec".currval, DEFAULT)

Команды ALTER SEQUENCE позволяет изменить параметры последовательности (кроме начального значение), например,

ALTER SEQUENCE "Клиент_sec" INCREMENT BY 2

Наконец, команда удаления последовательности:

DROP SEQUENCE "Клиент_sec"

Если необходимо изменить начальное значение последовательности, следует ее удалить и создать заново. Удаление последовательности, конечно же, не влияет на значения полей записей, которым значения последовательности были присвоены ранее.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: