Главная Программы Учебное пособие Практикум Дополнительно
    Введение
  Глава 1
  Глава 2
  Глава 3
  Глава 4
  Глава 5
  Глава 6
  Глава 7
  Глава 8
  Задания
  Литература
  Приложение 1
  Приложение 2
  Приложение 3

Практикум

Глава 8. Управление транзакциями

 

8.1. Последовательности

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

 

Создание последовательности

Синтаксис:

CREATE SEQUENCE последовательность

[INCREMENT BY n]

[START WITH n]

[{MAXVALUE n | NOMAXVALUE}]

[{MINVALUE n | NOMINVALUE}]

[{CYCLE | NOCYCLE}]

[{CACHE n | NOCACHE}]

где

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

Имя последовательности.

 

INCREMENT BY n

Интервал между двумя последовательными номерами; n является целым числом. Если это предложение опущено, приращение при генерации чисел равно 1.

 

START WITH n

Первое генерируемое число в последовательности. Если это предложение опущено, последовательность начинается с 1.

 

MAXVALUE n

Максимальное значение, которое может генерировать последовательность.

 

NOMAXVALUE

Максимальное значение по умолчанию, равное .

 

MINVALUE n

Минимальное значение последовательности.

 

NOMINVALUE

Задает минимальное значение, равное 1.

 

CYCLE | NOCYCLE

Продолжается ли циклическая генерация чисел после достижения максимального или минимального значения.

 

CACHE n | NOCACHE

Количество чисел, которые Oracle7 распределяет предварительно и хранит в памяти. По умолчанию сервер хранит в кеш-памяти 20 значений.

 

Подчеркнутые параметры используются по умолчанию.

Пример.  Создать последовательность S_DEPT_ID для первичного ключа таблицы S_DEPT.  Параметр CYCLE использоваться не должен.

 

 

Проверка параметров последовательности

Проверить значения параметров последовательности можно в таблице USER_SEQUENCES словаря данных. Столбец LAST_NUMBER содержит следующее свободное число.

 

 

Изменение последовательности

Изменение шага приращения, максимального и минимального значений, режима циклической генерации значений и кэширования определяется командой ALTER SEQUENCE.

Синтаксис:

ALTER SEQUENCE последовательность

[INCREMENT BY n]

[START WITH n]

[{MAXVALUE n | NOMAXVALUE}]

[{MINVALUE n | NOMINVALUE}]

[{CYCLE | NOCYCLE}]

[{CACHE n | NOCACHE}]

 

Примечание. Для изменения параметров необходимо быть владельцем последовательности или иметь для нее привилегию ALTER.  Команда влияет только на числа, генерируемые после изменения.  Чтобы начать генерацию с другого числа, необходимо удалить последовательность и создать заново.

 

Генерация значений последовательности

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

Пример. Включение нового отдела под названием "Finance" в регионе 2.

 

 

Пример.  Просмотр текущего значения последовательности S_DEPT_ID.

 

 

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

 

Удаление последовательности

Удаление последовательности из словаря данных производится с помощью команды DROP SEQUENCE.  После удаления последовательности ссылки на нее невозможны.

Пример.  Удаление последовательности S_DEPT_ID.

 

 

Для закрепления материала рекомендуется выполнить Практическое занятие 10.

 

8.2. Представления

Представление – это логический образ таблицы, созданный на основе реальной таблицы или другого представления.  Представление не содержит собственных данных, а скорее является “окном”, через которое можно просматривать или изменять данные из таблиц.  Представление хранится в словаре данных как команда SELECT.

 

Создание представлений

Представление создается командой CREATE VIEW с использованием подзапроса. Синтаксис:

 

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW представление

[(псевдоним[, псевдоним]…)]

AS подзапрос

[WITH CHECK OPTION [CONSTRAINT ограничение]]

[WITH READ ONLY]

где

FORCE

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

NOFORCE

Создание представления только при условии существования базовых таблиц (умолчанию).

представление

Имя представления.

псевдоним

Имена выражений, выбранных в запросе для представления.

подзапрос

Полная команда SELECT.

WITH CHECK OPTION

Режим, при котором добавлять или обновлять можно только строки, доступные в представлении.

ограничение

Имя, присвоенное ограничению CHECK OPTION.

WITH READ ONLY

Запрет применения к данному представлению операций DML.

 

Для подзапроса, участвующего при создании представления, действуют все правила, определенные для подзапроса (см. команду SELECT с подзапросом).  Получить описание представления можно точно также, как и описание таблицы (команда DESCRIBE среды SQL*Plus или команда SELECT * FROM имя_представления).  Выборка данных из представления производится посредством команды SELECT со ссылкой на это представление.

Рекомендуется использовать представление для:

  • ограничения доступа к базе данных;
  • упрощения запросов;
  • достижения независимости данных от приложений пользователя;
  • организации различных способов показа одних и тех же данных.

Представления делятся на простые и сложные.  В следующей таблице приведены ограничения, связанные с простыми или сложными представлениями.

 

  Простые представления Сложные представления
Количество таблиц Одна Одна или больше
Содержит функции Нет Да
Содержит группы данных Нет Да
Операции DML над представлением Да Нет

 

Пример.  Создается представление EMPVU45, включающее учетный номер, фамилию и должность каждого служащего отдела номер 45.

 

 

Изменение представления

Изменить параметры представления можно командой CREATE OR REPLACE VIEW.  При этом будет создано новое представление с тем же именем.

 

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

 

 

Пример.  Создание сложного представления с групповыми функциями для выборки данных из двух таблиц.

 

 

Правила выполнения операций DML над представлением.

Операции DML могут быть выполнены только с простым представлением!  При этом даже для простого представления существуют некоторые ограничения.

Удаление строк невозможно, если представление содержит следующее:

  • ключевое слово DISTINCT.

Нельзя изменять данные в представлении, если оно содержит:

  • одно из вышеуказанных условий;
  • столбцы, описанные как выражения;
  • псевдостолбец ROWNUM.

Нельзя добавлять данные в представление, если оно содержит:

  • одно из вышеуказанных условий;
  • какие-либо столбцы NOT NULL, не выбранные представлением.

Параметр WITH READ ONLY запрещает операции DML над этим представлением.  Этот параметр актуален только для простого представления, сложное представление всегда доступно пользователю только для выборки данных.

Предложение WITH CHECK OPTION позволяет задать ограничения, накладываемые на представление. Условие для ограничения значений, изменяемых или добавляемых через представление, содержится в предложении WHERE подзапроса в определении представления.  При использовании такого представления необходимо следить за тем, чтобы результаты операций DML оставались в пределах домена представления.

Пример.  Попытка изменить номер отдела для какой-либо строки в представлении закончится неудачей, т.к. при этом нарушится ограничение CHECK OPTION.

 

 

Пример.  Создание представления с параметром READ ONLY.  При попытке выполнить операцию DML над какой-либо строкой представления сервер Oracle7 выдает сообщение об ошибке ORA-01732.

 

 

Пример.  Получение имени представления и его параметров из таблицы словаря данных USER_VIEWS.

 

 

 

Удаление представления

Удалить представление можно с помощью команды DROP VIEW.  Удаление представления не вызывает потери данных.

Пример.

 

Для закрепления материала рекомендуется выполнить Практическое занятие 11.

 

8.3. Индексы

Объект базы данных, обеспечивающий прямой и быстрый доступ к строкам в таблице, называется индексом.  Индексы используется сервером базы данных для ускорения выборки строк с помощью указателя. При использовании индексов уменьшается количество операций обмена с внешней памятью за счет использования быстрого метода поиска данных.  Индексы не зависят от таблицы, для которой они были созданы.

Индекс можно создать автоматически (при описании ограничений, типа PRIMARY KEY или UNIQUE) или вручную (используя команду CREATE INDEX).

Как правило, для представления индексов используется структура B-дерева.  Каждый индекс состоит из значений столбцов и указателей (ROWID), организованных в виде страниц (ветвей).  При выполнении запроса осуществляется поиск по ветвям дерева до обнаружения листа со значением, содержащим указатель.

 

Рисунок 13. Структура индекса в виде В-дерева

 

Рисунок 14. Поиск в В-дереве

 

Типы индексов:

  • уникальный – обеспечивает уникальность значений в столбце;
  • неуникальный – ускоряет запросы;
  • простой – в индексе использован только один столбец;
  • составной или сложный – в индексе использовано несколько столбцов.

 

Создание индекса

Синтаксис:

CREATE INDEX index

ON table (column [, column]…);

где

index

Имя создаваемого индекса.

table

Имя таблицы, на основе которой он создается.

column

Имя столбца (столбцов) для создания индекса.

 

Пример. Создание индекса для таблицы S_EMP на столбце LAST_NAME.

 

 

В каких случаях оправдано создание индекса:

  • Столбец часто используется в предложении WHERE или условии соединения.
  • Столбец имеет широкий диапазон значений.
  • Столбец содержит большое количество неопределенных значений.
  • Два или более столбцов часто используются вместе в предложении WHERE или условии соединения.
  • Таблица большого размера, и предполагается, что большинство запросов будут выбирать менее 10-15% строк.

Когда не следует создавать индекс:

  • Таблица небольшого размера.
  • Столбцы не очень часто используются как параметры в условиях при запросе.
  • Большая часть запросов будет выбирать более, чем 10-15% строк.
  • Таблица часто обновляется.

Определение индекса содержится в представлении словаря данных USER_INDEXES.  Представление USER_IND_COLUMNS содержит имя индекса, имя таблицы и имя столбца.

 

 

Удаление индекса

Удаление индекса из производится командой DROP INDEX.

Пример.  Удаление индекса с именем s_emp_last_name_idx.

 

 

Для закрепления материала рекомендуется выполнить Практическое занятие 12.