Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП СУБД Ч.2.doc
Скачиваний:
12
Добавлен:
11.06.2015
Размер:
545.79 Кб
Скачать

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

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

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

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

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

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

START WITH 0 INCREMENT BY 1

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

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

Теперь расмотрим пример типичного использования последовательности. Напомним, что в рассматриваемой схеме в таблице "Клиент" поле "Код Клиента" как раз является суррогатным ключем, это же значение переносится и в таблицу "Заказ" в поле "Клиент" для моделирования связи между записями таблицы (на поле "Клиент" наложено ограничение внешнего ключа). Приводимые ниже две команды 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"

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

Раздел 4. Синонимы

Специальным объектами базы данных являются так называемые синонимы, которые используются для упрощенного обращения к таблицам и другим объектам, созданными другими пользователями и соответственно хранящимися в их схемах. Для обращения к чужим объектам необходимо указывать полное имя объекта, состоящего из имени схемы и собственно имени объекта.

Например, при обращении к таблице clients пользователя с именем учетной записи system следует использовать запрос:

SELECT * FROM system.clients

Можно создать синоним для этой таблицы следующим образом:

CREATE PUBLIC SYNONYM clients FOR system.clients

Здесь PUBLIC используется для создания синонима, доступного для всех учетных записей системы.

Теперь к этой таблице можно обращаться через ее синоним:

SELECT * FROM clients

Следует иметь в виду, что многие системные таблицы и представления доступны пользователям именно через синонимы, поскольку при обращении к таким объектам не используются имена схем SYS и SYSTEM. Список существующих синонимов можно получить из представлений *_synonyms.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]