<<
>>

Когда следует использовать хранимые процедуры и триггеры.

Все приведенные здесь примеры даны на псевдокоде, близком к языку СУБД Oracle (синтаксис для других СУБД мало чем отличается).

Хранимые (присоединенные, разделяемые и т.д.) процедуры.

Использование хранимых процедур БД преследует четыре цели:

1) обеспечивается новый независимый уровень централизованного контроля доступа к данным, осуществляемый АБД;

2) одна процедура может использоваться несколькими ПП. Это позволяет существенно сократить время написания программ за счет оформления их общих частей в виде процедур БД (общих библиотек). Процедура компилируется и помещается в БД и становится доступной для многократных вызовов. Так как план ее выполнения определяется единожды при компиляции, то при последующих вызовах процедуры фаза оптимизации опускается, что значительно экономит вычислительные ресурсы системы;

3) использование хранимых процедур БД позволяет значительно снизить трафик сети. Прикладная программа, вызывающая процедуру, передает серверу лишь ее имя и параметры;

4) хранимые процедуры в сочетании с триггерами (правилами), о которых речь пойдет ниже, предоставляет администратору мощные средства поддержки целостности данных.

Различают хранимые процедуры, функции и пакеты. Функция, в отличие от процедуры, возвращает в вызывающую программу одно значение, а процедура ничего не возвращает. Процедуры и функции могут также возвращать значения через параметры. С помощью пакета описывается совокупность (библиотека) функций и/или процедур. Ниже приведены структуры хранимой процедуры и функции.

Процедура

CREATE PROCEDURE имя (параметры) IS

переменные процедуры;

BEGIN

тело процедуры, включающее операторы языка SQL, условий (IF), циклов (LOOP, FOR и т.д.) и присваивания;

END;

Функция

CREATE FUNCTION имя (параметры) RETURN тип

возвращаемого значения IS

переменные функции;

BEGIN

тело функции, включающее операторы языка SQL, условий (IF), циклов (LOOP, FOR и т.д.) и присваивания;

RETURN возвращаемое значение;

END;

Пример.

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

CREATE FUNCTION проверка(номер IN NUMBER, сумма IN NUMBER)

RETURN NUMBER IS numrows INTEGER; i INTEGER;

BEGIN

SELECT COUNT(*) INTO numrows FROM счет

WHERE номер счета = номер AND сумма счета >= сумма;

IF(numrows > 0)

THEN

/* разрешить операцию */

i:=l;

ELSE

/* запретить операцию */ i:=0;

END IF;

RENURN i;

END;

Здесь с помощью оператора SELECT определяется число таких записей в таблице «счет», у которых номер счета (столбец «номер счета») в записи совпадает с запрашиваемым номером (параметр «номер») и сумма на счете (столбец «сумма счета») была бы не меньше запрашиваемой суммы (параметр «сумма»). Если число таких строк (numrows) больше нуля, то операция выдачи денег разрешается, в противном случае запрещается.

Эта процедура запрашивается из ПП, обслуживающей банкомат. Ниже приведены спецификации запроса:

1) для языка PL/SQL:

j:= проверка(номер, сумма);

2) для языка Pro*C (Tuxedo):

EXEC SQL EXECUTE BEGIN

j = проверка(:номер, :сумма);

END;

END-EXEC;

Хранимые процедуры могут быть включены в СУБД при создании БД и ее таблиц или позднее.

Триггеры (правила). Триггер — это процедура, автоматически запускаемая ядром СУБД при выполнении определенных условий изменения таблицы, задаваемых при описании триггера. Задача триггера — это реализация некоторых внешних правил.

Ниже приведена структура триггера.

[FOR EACH ROW]

[WHEN (дополнительное условие срабатывания триггера)] [DECLARE

переменные триггера;]

BEGIN

тело триггера, включающее операторы языка SQL, условий, циклов, присваивания, вызова хранимых процедур или циклов;

END;

Здесь фигурными скобками обозначены альтернативные значения ключевых слов, а квадратными скобками — необязательные параметры.

В табл. 12.1 подробно представлены параметры описания триггера.
Таблица 12.1. Параметры описания триггера

Окончание табл. 12.1

Пример. Пусть требуется оповещать оператора банкомата в том случае, если число купюр в банкомате становится меньше 100. Ниже приведены спецификации соответствующего триггера.

CREATE TRIGGER оповещение

AFTER UPDATE OF кол.кутор ON банкомат

FOR EACH ROW

WHEN (:new.mn.купюр < 100)

BEGIN

сообщение(...);

END;

В данном случае хранимая процедура «сообщение» посылает оператору банкомата письмо (например, по электронной почте) о необходимости обслужить устройство.

Также как и хранимые процедуры, триггеры могут быть включены в СУБД при создании БД и ее таблиц. Следует помнить, что некоторые CASE-средства (например, Erwin) автоматически генерируют некоторые триггеры для поддержки ограничений целостности базы данных (см. ниже пример для Erwin).

Современные инструментальные средства разработки приложений. В настоящее время разработано много средств (более 50) для создания клиентских приложений в архитектуре клиент/сервер (К/С), являющейся основной для распределенных систем: Delphi, Uniface Six 6.1, SQL Windows, Gupta, Informix-4GL, Informix NewEra, JAM 7 (JYACC), MS Access Up-sizing Tools, Designer/2000, Developer/2000, Power Builder Desktop, Sybase APT Workbench и др.

<< | >>
Источник: Григорьев Ю.А., Ревунков Г.И.. Банки данных. 2002

Еще по теме Когда следует использовать хранимые процедуры и триггеры.:

  1. КОГДА СЛЕДУЕТ МЕДИТИРОВАТЬ
  2. КОГДА СЛЕДУЕТ ГОВОРИТЬ С МУЖЧИНОЙ
  3. Уличающий вопрос необходим, когда собеседник искажает или скрывает информацию, когда возникает противоречие между его словами и ранее установленными вами фактами. Его надо использовать с осторожностью, лучше не в прямой форме и ближе к концу разговора, чтобы не оборвать его ход.
  4. Схема «Процедуры комфортизации».
  5. Схема «Процедуры комфортизации».
  6. 3. Процедуры банкротства гражданина
  7. ИТАК, ПРОЦЕДУРА КОМФОРТИЗАЦИИ.
  8. ИТАК, ПРОЦЕДУРА КОМФОРТИЗАЦИИ.
  9. 28. Процедура наблюдения
  10. ПРОЦЕДУРЫ И РИТУАЛЫ
  11. Процедуры и техники.
  12. Процедура комфортизации («Послушный» и «непослушный» мозг»).
  13. УСТАНОВИВ ГРАНИЦЫ, ИХ СЛЕДУЕТ УВАЖАТЬ
  14. 5.3. Социометрические процедуры
  15. 3.3. Процедура экспериментирования
  16. 4.4. Процедура проведения