Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 курс (заочка) / Лабораторные работы / !Лабораторный практикум ТБД (задание).pdf
Скачиваний:
17
Добавлен:
08.01.2022
Размер:
1.12 Mб
Скачать

Обработка исключений

В лекциях опущена тема обработки исключений в 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