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

Процедуры, функции, пакеты.

Синтаксис оператора CREATE OR REPLACE PROCEDURE таков:
CREATE [OR REPLACE] PROCEDURE имя_процедуры
[(аргумент [{IN | OUT |IN OUT}] тип,
аргумент[{IN | OUT |IN OUT}] тип}] {IS | AS}
тело_процедуры, где имя_процедуры - это имя создаваемой процедуры, аргумент - имя параметра процедуры, тип - это тип соответствующего параметра, тело_ процедуры - блок PL/SQL

Для изменения текста процедуры необходимо удалить и повторно создать ее, поэтому ключевые слова OR REPLACE (или заменить) позволяют выполнить такую операцию за один раз.

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

CREATE OR REPLACE PROCEDURE имя_процедуры AS
/* Раздел объявлений. */
BEGIN /* Выполняемый раздел. */
EXCEPTION /* Раздел исключительных ситуаций. */
END [
имя_процедуры].

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

Удаление процедур DROP PROCEDURE имя_процедуры.

Хранимые процедуры - приложение, объединяющее запросы и процедурную логику и хранящееся в базе данных.
Хранимые процедуры позволяют содержать вместе с БД достаточно сложные программы, выполняющие большой объем работы без передачи данных по сети и взаимодействия с клиентом.

Функции очень похожи на процедуры. Как функции, так и процедуры можно хранить в базе данных или описывать в блоке. Однако вызов процедуры сам по себе является оператором PL/SQL, в то время как вызов функции - это часть некоторого выражения.
Синтаксис для создания хранимой функции:
CREATE [OR REPLACE] FUNCTION
имя_функции [(аргумент [{IN | OUT |IN OUT}] тип, аргумент[{IN | OUT |IN OUT}] тип)]
RETURN
возвращаемый _тип {IS | AS}
тело_функции, где имя_функции - это имя функции; аргумент и тип аналогичны при создании процедуры; возвращаемый_тип - это тип значения, возвращаемого функцией; тело_функции - блок PL/SQL

Как и для процедур, список аргументов необязателен.

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

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

Удаление функций DROP FUNCTION имя_функции.

Пакет - это конструкция PL/SQL, позволяющая хранить связанные объекты в одном месте. Преимущества пакета:

-облегчает процесс разработки;

- дополнительная функциональность (глобальные переменные);

- повышает производительность системы.

Пакет состоит из двух различных частей: описания и тела, каждая из которых хранится по отдельности в словаре данных. В пакет могут входить: процедуры, функции, курсоры, типы и переменные.
CREATE [OR REPLACE] PACKAGE имя_пакета {IS |AS}
описание_процедуры | описание_функции | объявление_переменной |
определение_типа | объявление_исключительной_ситуации | объявление_курсора
END [имя_пакета];

Тело пакета (package body) - это объект словаря данных, хранящийся отдельно от заголовка пакета. Любое предварительное объявление в заголовке пакета должно быть раскрыто в его теле. Описание процедуры или функции должно быть таким же и включать в свой состав имя подпрограммы, имена ее параметров и вид каждого параметра.
Вызов процедуры аналогичен вызову процедуры, не включенной в пакет. Единственное отличие такого вызова - присутствие перед именем процедуры имени пакета.



. Триггеры, их основные свойства и значение.

Триггеры так же, как процедуры и функции, являются именованными блоками PL/SQL с разделом объявлений, выполняемым разделом и разделом исключительных ситуаций. Триггер выполняется, когда происходит событие, запускающее этот триггер (операторы INSERT, UPDATE или DELETE).
Триггеры можно использовать для:

- Реализации сложных ограничений целостности данных, которые невозможно осуществить через описательные ограничения;
- Сложные проверки для защиты информации

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

Элементы триггера

Обязательными элементами триггера являются его имя, активизирующее событие и тело. Условие WHEN необязательно.

Типы триггеров

Тип триггера определяется тем, какое событие его активизирует: INSERT (ввод), UPDATE (обновление) или DELETE (удаление). Триггеры могут активизироваться до (BEFORE) или после (AFTER) операции, а также для строки (FOR EACH ROW) или оператора.

Ограничения для строчного триггера

FOR EACH ROW

WHEN (new.onhand < new.reorder)

Условные предикаты

INSERTING, UPDATING, DELETING

Ограничения, налагаемые на триггеры
В триггере нельзя задавать операторы управления транзакциями: COMMIT, ROLLBACK или SAVEPOINT.

Использование :old и :new в строковых триггерах
Строковый триггер срабатывает один раз для каждой строки, обрабатываемой активизирующим оператором. Внутри триггера можно обращаться к строке, обрабатываемой в данный момент. Для этого служат две псевдозаписи :old и :new. Хотя синтаксически они рассматриваются как записи, фактически они записями не являются. Поэтому их называют псевдозаписями. Псевдозапись :old не определена для операторов INSERT, а псевдозапись :new - для операторов DELETE.


Hosted by uCoz