- •ВВЕДЕНИЕ
- •Лабораторная работа №1
- •Лабораторная работа №3-4
- •Создание первичного ключа двумя способами
- •Создание суррогатных ключей с помощью последовательностей
- •Ввод данных
- •Создание связей
- •Создание индексов
- •Изменение структуры таблиц, контрольные ограничения
- •Ограничения на модификацию столбцов таблиц
- •Представления
- •Контрольные задания к л.р. № 3-4
- •Лабораторная работа №5-6
- •Логика приложения
- •Обработка файлов PL/SQL
- •Хранимые процедуры
- •Хранимая процедура Customer_Insert
- •Листинг 1. Процедура CustomerInsert
- •Хранимая процедура NewCustomerWithTransaction
- •Задания к лабораторной работе.
- •Триггеры
- •Пример предваряющего триггера
- •Пример завершающего триггера
- •Обработка исключений
- •Словарь данных
- •Дополнительный материал для самостоятельного изучения
- •Управление параллельной обработкой
- •Уровень изоляции «завершенное чтение»
- •Уровень изоляции «сериализуемость»
- •Уровень изоляции «только чтение»
- •Дополнительные замечания о блокировках
- •Oracle и безопасность
Обработка исключений
В лекциях опущена тема обработки исключений в PL/SQL. Однако, обработка исключений важна и полезна. Дело в том, что эта тема является слишком обширной, чтобы обсуждать ее подробно. Однако если вы в будущем собираетесь программировать на PL/SQL, обязательно изучите этот важный вопрос. Обработка исключений может использоваться в любых видах процедур на PL/SQL, но особо она полезна в предваряющих и замещающих триггерах для отмены незафиксированных обновлений. Исключения необходимы потому, что в Oracle откат транзакции невозможно произвести в теле триггера. Вместо этого можно использовать исключения для генерации предупреждений и сообщений об ошибках. Исключения также дают Oracle больше информации о том, что делает триггер.
Например, триггер, изображенный в листинге 4, имеет странную особенность. Если вы введете
UPDATE CustomerPurchases SET Copy = '5/5' WHERE Title = 'Mystic Fabric';
триггер не обновит ни одной строки. Однако Oracle сообщит, что все строки представления, имеющие в столбце Title название «Mystic Fabric», были обновлены. Это было обусловлено тем, что триггеру были переданы все строки, и Oracle не знала, какая из них вызвала обновление, а какая нет. Если же вы включите в этот триггер код, генерирующий исключение, Oracle будет знать, что строка не была обновлена, и выдаст правильное количество обновленных строк.
Словарь данных
Oracle поддерживает исчерпывающий словарь метаданных. Этот словарь описывает структуру таблиц, последовательностей, представлений, индексов, ограничений, хранимых процедур и многого другого. Он также содержит исходные тексты процедур, функций и триггеров. И это еще не все.
В таблице DICT словаря метаданных содержатся данные, описывающие сам словарь. Вы можете запрашивать данные из этой таблицы, чтобы узнать больше о содержимом словаря данных, но имейте в виду, что она имеет большие
47
размеры. Например, если вы запросите имена всех таблиц словаря данных, вам будет возвращено более 800 строк.
Предположим, Вы хотите узнать, какие таблицы с информацией о пользовательских и системных таблицах имеются в словаре данных. В этом вам поможет следующий запрос;
SELECT Table_Name, Contents FROM DICT
WHERE Table_Name LIKE (‘%TABLES%’);
Будет возвращено около двадцати пяти строк. Одна из таблиц будет называться USER_TABLES. Чтобы увидеть столбцы этой таблицы, введите
DESC USER_TABLES:
Вы можете использовать эту стратегию для получения из словаря метаданных информации об интересующих вас объектах и структурах. В таблице перечислены многие из представлений и указано их назначение. Таблицы USER_SOURCE и USER_TRIGGERS полезны, когда требуется узнать, исходные тексты каких процедур и триггеров хранятся в настоящий момент в базе данных.
Таблица. Некоторые полезные таблицы из словаря данных Oracle
Имя таблицы |
Содержимое |
DICT |
Метаданные, описывающие словарь данных |
USER_CATALOG |
Список таблиц, представлений, последовательностей |
USER_TABLES |
и других структур, принадлежащих пользователю |
Структуры таблиц пользователя |
|
USER_TAB_COLUM Потомок таблицы USER_TABLES. Содержит данные |
|
NS |
о столбцах таблиц. Синонимом является COLS |
USER_VIEWS |
Пользовательские представления |
USER_CONSTRAIN |
Пользовательские ограничения |
USER_CONS_COLU |
Потомок таблицы USER_CONSTRAINTS. Содержит |
MNS |
столбцы, на которые наложены ограничения |
USER_TRIGGERS |
Метаданные, описывающие триггеры, Запрашивайте |
столбцы Trigger_Name, Trigger_Type и Trigger_Event.
Предупреждение'. Trigger_Body в действительности
48
USER_SOURCE Чтобы получить текст процедуры MYTRIGGER.
введите
SELECT Text
FROM USER_SOURCE WHERE Name='MYTRIGGER'
AND Type='PROCEDURE'
Самостоятельно исследуйте словарь метаданных.
Имейте в виду, что Oracle записывает все имена в верхнем регистре. Если вы ищете триггер On_Customer__Insert, вам следует искать имя
ON_CUSTOMER_INSERT.
Полученную информацию отобразите в отчете.
49