- •Автор: Заставной д.А., преподаватель кафедры информатики и информационных таможенных технологий Ростовского филиала рта, к.Т.Н.
- •Оглавление
- •Раздел 1. Объекты базы данных
- •Раздел 2. Создание таблиц
- •2.1. Общие сведения
- •2.2. Типы значений
- •2.3. Значение по умолчанию
- •2.4. Ограничения
- •2.5. Создание таблиц при помощи команды select
- •2.6. Изменение определения таблицы
- •Alter table "Все заказы(кп)"
- •Alter table "Клиент(кп)" add constraint "Клиент(кп)_ф_с"
- •Alter table "Клиент(кп)"
- •Раздел 3. Последовательности
- •Раздел 4. Синонимы
- •Раздел 5. Представления
- •Раздел 6. Индексы
- •Explain plan
- •Раздел 7. Системный каталог
- •Заключение
- •Библиографический список
- •Указатели
- •Раздел 1. Объекты базы данных 5
- •Раздел 2. Создание таблиц 6
- •Раздел 3. Последовательности 33
Раздел 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.