Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД (2).doc
Скачиваний:
48
Добавлен:
17.04.2019
Размер:
133.12 Кб
Скачать

9.Хранимые процедуры, функции и пакеты. Триггеры.

Блок PL/SQL состоит из четырех секций:

-секция заголовка (header section)- содержит спецификацию процедуры, функции, пакета или триггера, которая включает в себя название блока, а также описание входных и выходных параметров

-секция объявления (declaration section)- предназначена для объявления переменных, констант, курсоров, которые будут использоваться в выполняемой секции процедуры, функции или триггера.

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

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

CREATE OR REPLACE PROCEDURE имя(формальные параметры)

AS

BEGIN

Выполняемы блок

END/

Между именем входного параметра и типом можно указать лва специальных слова – IN и/или OUT.

Функции отличаются от процедур тем, что возвращают какое-то значение и вызываются только из других предложений SQL. Синтаксически это отличие отражено в спецификации функции. В остальном, функция создается по тем же правилам, что и процедура. Например, оператор создания функции, возвращающей максимальную цену среди всех товаров может выглядеть следующим образом:

CREATE FUNCTION get_max_price

RETURN NUMBER

AS

Max_price NUMBER;

BEGIN

SELECT max(value) INTO max_price FROM prices

RETURN max_price;

END;/

Пакеты (packages) для совместного хранения полезных функций, процедур, типов записей и курсоров.

Создание спецификации пакета:

CREATE PACKAGE имя_пакета IS[объявления_переменных_и_типов][спецификации_курсоров][спецификации_функций_и_процедур]

END [имя_пакета];/

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

Создание тела пакета:

CREATE OR REPLACE PACKAGE BODY имя_пакета IS[локальные_переменные][полные_спецификации_курсоров_пакета][полные_спецификации функций_и_процедур_пакета]BEGIN[выполняемые_операторы][EXCEPTION][обработчики_исключений]

END [имя_пакета];/

Выполняемая секция пакета обычно используется для инициализации локальных переменных пакета или переменных пакета. Она соответствует конструктору класса в ООП.

Триггер - это особого вида процедура, которая выполняется автоматически при возникновении некоторого события, указанного в спецификации триггера, - триггерного события (triggering event). Прим опер DML DDL, ошибка сервера.

CREATE OR REPLACE TRIGGER имя_триггера момент_срабатывания триггерное_событие

ON имя_таблицы_или_представления

[WHEN триггерное_ограничение]

[FOR EACH ROW]

[DECLARE

объявления]

BEGIN

Операторы

[EXCEPTION

WHEN имя_исключения THEN …]

END имя_триггера;

Момент срабатывания:INSTEAD OF, AFTER, BEFORE.

Необязательный набор ключевых слов FOR EACH ROW указывает на необходимость выполнять тело триггера для каждой строки, затрагиваемой запускающим оператором, строчный триггер.

Корреляционное имя new имеет смысл использовать только в триггерах на INSERT и UPDATE, поскольку в триггерах на DELETE никакого нового значения полей нет.