Корпоративные базы данных - статьи

Программирование триггеров и процедур



ERwin реализует собственный макроязык для подготовки прототипов триггеров и процедур. Схема
использования прототипов заключается в подготовке шаблона для различных типов триггеров
(например, триггер, реализующий логику каскадного удаления - ON DELETE CASCADE). Базовые
шаблоны встроены в ERwin, но пользователь может определить свои собственные шаблоны и
использовать их вместо стандартных.

Макроязык шаблонов реализует большое количество макросимволов, ссылающихся на различные
объекты базы данных, например:

%Action - расширяется в UPDATE/INSERT/DELETE;
%ForEachAtt(&#60таблица&#62,&#60разделитель&#62) { &#60код макрокоманды&#62 } -
циклическое выполнение группы операторов над каждым атрибутом таблицы;
%ForEachEntity() { } - циклическое выполнение функций над всеми таблицами;
%If, %else - операторы условного управления.


Например, шаблон триггера для реализации поддержки on delete cascade:
%Action /* ERwin Builtin %Datetime */
/* %Parent %VerbPhrase %Child ON PARENT DELETE CASCADE */
delete %Child
from %Child,deleted
where
/* %%JoinFKPK(%Child,deleted," = "," and") */
%JoinFKPK(%Child,deleted," = "," and")
В модели, приведенной выше для связи positions - salary_track будет сгенерирован следующий
прототип триггера:

DELETE /* ERwin Builtin Fri Jun 02 17:12:09 1995 */
/* positions приносила доход salary_track ON PARENT DELETE CASCADE */
delete salary_track
from salary_track, deleted
where
/* %%JoinFKPK(%Child,deleted," = "," and") */
salary_track.empl_id = deleted.empl_id
Все макрофункции, которые могут использоваться в триггерах, могут использоваться также и в
процедурах. Существенно, что процедуры, как и триггеры, связываются с таблицей.

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




Содержание раздела