Скачиваний:
25
Добавлен:
11.04.2015
Размер:
35.53 Кб
Скачать

28) Обработка исключений в PL\SQL.

Исключение - это переменная в PL/SQL, возбуждаемая во время выполнения блока. В случае возбуждения исключения (исключительной ситуации), блок всегда прекращает работу, но можно задать обработчик исключения для выполнения заключительных действий.

В теле процедуры или функции предусмотрена возможность обработки ошибки. Для этого используется блок EXCEPTION, в который передается управление в случае возникновения ошибки в теле процедуры.

В этом блоке можно задать последовательности операторов, которые будут выполняться при возникновении ошибки того или иного типа.

В общем виде структура блока обработки блока ошибок имеет вид:

EXCEPTION

WHEN <идентификатор вида ошибки 1>THEN

<операторы обработки вида ошибки 1>

WHEN <идентификатор вида ошибки 2>THEN

< операторы обработки вида ошибки 2>

...

[WHEN OTHERS THEN

< операторы обработки для всех прочих видов ошибок>]

В качестве предопределенных идентификаторов для наиболее часто встречающихся видов ошибок Oracle используют следующие:

ZERO_DIVIDE - Попытка деления на нуль.

NO_DATA_FOUND - Однострочная команда SELECT не возвращает ни одной строки.

INVALID_NUMBER - Неудачная попытка преобразования строки в число.

CURSOR_ALREADY_OPEN – Повторное открытие оператора open уже открытого курсора.

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

<тело процедуры>

RAISE <идентификатор вида ошибки>;

<продолжение тела процедуры>

29) Процедуры и функции на PL\SQL. Пакеты процедур.

В БД могут создаваться сохраняемые процедуры (функции) и пакеты процедур на специализированном языке PL\SQL, вызываемые затем из клиентских приложений.

Команда создания хранимой процедуры имеет вид:

CREATE PROCEDURE <имя процедуры>(<список параметров>) IS <объявление переменных>

BEGIN

<текст процедуры>

[EXCEPTION

<обработка исключений>]

END;

В текстах процедур и функций применяется набор команд, стандартный для процедурных языков: команды присваивания значения (:=) и выполнение арифметических операций (+,-, /, *), команды условий (IF-THEN, CASE), команды цикла (FOR LOOP,WHILE LOOP) и т.д.Для доступа к таблицам БД в тексте могут использоваться команды манипулирования данными INSET, UPDATE, DELETE, SELECT, LOCK TABLE.

Для обработки в теле процедуры или функции результата выборки оператора SELECT, возвращающего более одной строки, удобно использовать курсоры. Курсор объявляется в декларативной части процедуры как переменная особого вида:

CURSOR <имя курсора> [(<параметры запроса>)] IS <текст запроса>;

При выполнении операций с курсорами в теле процедуры применяются следующие операторы:

OPEN <имя курсора> [(<значения параметров>)]- производит открытие курсора, при этом транслируется и выполняется соответствующий запрос.

FETCH <имя курсора> INTO <переменная>- выборка одной строки из результирующего набора данных.

CLOSE <имя курсора>- закрытие курсора.

В теле процедуры или функции предусмотрена возможность обработки ошибки. Для этого используется блок EXCEPTION.

30) Триггеры в СУБД Oracle.

В БД Oracle могут создаваться специальные процедуры-триггеры. Они вызываются сервером Oracle автоматически при наступлении определенных событий, таких как вставка, удаление, или изменение строки в таблице. Триггеры обычно используются для обеспечения целостности данных в тех случаях, когда этого требования нельзя добиться с помощью стандартных средств: ограничений ссылочной целостности, ограничений вида «проверка условия» и т.д. Создание триггера, относящегося к конкретной табл., в общем случае выглядит так:

CREATE TRIGGER <имя триггера><вид триггера>

<определение события>

ON[<имя схемы>]<имя таблицы>

[FOR EACH ROW]

[WHEN <условие>]

<тело триггера>;

Опцией <вид триггера> задается способ реакции на события. Они могут принимать следующие три значения:

BEFORE – триггер вызывается перед наступлением события;

AFTER – триггер вызывается после наступления события;

INSTEAD OF - триггер выполняется вместо действия, предусмотренного событием.

С помощью опций INSERT, DELETE, или UPDATE [OF <перечень столбцов>] определяется событие, инициирующее вызов триггера.

При указании опции FOR EACH ROW триггер вызывается каждый раз при изменении/удалении/добавлении каждой строки в процессе выполнения одного оператора. При использовании этой опции триггер вызывается один раз, в момент начала работы оператора.

В предложении WHEN может быть указано дополнительное SQL-условие запуска триггера.

В теле триггера и в условии можно обращаться к атрибутам строки, при обработке которой вызывается триггер, через ключевые слова OLD.<имя атрибута>(старые значения) и NEW.<имя атрибута> (новые значения, устанавливаемые с помощью оператора UPDATE или INSERT). В теле триггера эти атрибуты должны предваряться двоеточием.

31) Материализованные представления в СУБД Oracle.

Представление — виртуальная (логическая) таблица, представляющая собой поименованный запрос, который будет подставлен как подзапрос при использовании представления.

Материализованные представления данных (materialized views) появились как вариация одноименной категории объектов БД, предлагаемой стандартом SQL. Аналогично обычным представлениям, они предполагают хранение формулировки запроса SELECT к таблицам-источникам, однако вдобавок сохраняют и сам результат запроса в виде хранимой таблицы. Делается это с основною целью обеспечить более быстрый, или же попросту надежный доступ к данным. Оборотной стороной является усложнение техники работы с данными, неизбежное вследствие раздвоения, возникающего на логическом уровне схемы (источники подзапроса — посчитанный результат).

Материализованные представления создаются, переопределяются и удаляются командами {CREATE | ALTER | DROP} MATERIALIZED VIEW …,

например:

CREATE MATERIALIZED VIEW jobsal

AS

SELECT job, SUM ( sal ) AS sum_sal

FROM emp

GROUP BY job;

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

Соседние файлы в папке ответы