Процедуры, функции, пакеты.
Синтаксис
оператора 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.