Читаем BPwin и Erwin. CASE-средства для разработки информационных систем полностью

Переопределение шаблона триггера для сущности. ERwin позволяет создавать собственные триггеры Entity Override для любой сущности в модели. Шаблоны Entity Override используются вместо стандартных шаблонов, а также вместо шаблонов RI Type Override и Relationship Override, если при генерации схемы включена опция Entity Override.

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

Для редактирования триггера следует щелкнуть правой кнопкой мыши по таблице и выбрать во всплывающем меню пункт Trigger. Появляется диалог Table Trigger Viewer, в нижней части которого имеется две кнопки -Table Trigger и Trigger Template, которые вызывают диалоги, предназначенные для создания и редактирования пользовательских триггеров и шаблонов триггеров ссылочной целостности (рис. 2.78).

Рис. 2.78. Диалог Table Trigger Viewer


Рассмотрим простейший пример, в котором переопределим шаблон триггера для сущности. Предположим, бизнес-правила требуют, чтобы при любом изменении имени клиента (колонка CustomerName таблицы CUSTOMER, рис. 2.79) в таблице SECURITY создавалась строка, в которой бы фиксировалось прежнее значение имени, новое значение, дата изменения и имя пользователя, произведшего изменение.

Рис. 2.79. Таблицы CUSTOMER и SECURITY

Для создания триггера служит редактор Table Trigger Editor (вызывается кнопкой Table Trigger диалога Table Trigger Viewer) (рис. 2.80).

Рис. 2.80. Диалог Table Trigger Editor


Раскрывающийся список Table позволяет выбрать таблицу, на которой будет создан триггер. На рис. 2.80 это таблица CUSTOMER.

В списке Trigger отображается имя триггера (SecurWrite). Если имя не задано, ERwin генерирует триггеры ссылочной целостности по умолчанию. Кнопки New, Rename и Delete служат соответственно для внесения нового триггера в список, переименования и удаления триггера из списка.

Группа окон выбора Trigger On позволяет задать тип триггера - при каком событии триггер будет запускаться - при удалении Delete, вставке Insert или обновлении Update-строки таблицы. При выборе любого события ERwin автоматически формирует текст шаблона соответствующего триггера ссылочной целостности. Опции Before и After позволяют задать время выполнения триггера - до или после SQL-команд INSERT, UPDATE или DELETE. В примере на рис. 2.80 создается триггер, выполняемый до команды обновления UPDATE для колонки CustomerName таблицы CUSTOMER.

Опции Table и Row (поддерживается ORACLE 7.x, SQLBase V6, Watcom V4 и AS/400 V3) показывают, каким образом будет выполняться триггер. При генерации в текст триггера будут соответственно включены предложения "FOR EACH TABLE" или "FOR EACH ROW".

Old - ссылка на прежнее значение при обновлении поля, New - ссылка на новое значение при обновлении таблицы. В тексте шаблона триггера используется макрос %RefClause, при генерации текста триггера по шаблону включается предложение REFERENCES. В примере для нового значения установлено имя "newl", для старого - "oldl".

В списке в нижней части диалога показываются имена родительской таблицы (Parent), дочерней таблицы (Child), имя связи (Verb Phrase) и правило ссылочной целостности (Integrity Rule) в случае, если редактируется триггер ссылочной целостности.

В окне Template Code можно ввести код шаблона триггера. Код шаблона триггера, соответствующий бизнес-правилу рассматриваемого примера (создан на основе шаблона триггера ссылочной целостности), приведен ниже:

create trigger %TriggerName

%Fire %Actions(" or")

on %TableName

%RefClause

%Scope

/* ERwin Builtin %Datetime */ /* default body for %TriggerName */ begin

Insert into Security (OldName.NewName, UserUpdate, UpdateDate) values (:old1.CustomerName,:new1,CustomerName, User, Sysdate);

end;

/

В окне Expanded Code отображается код триггера (на языке выбранного сервера, в примере - Oracle 7.2), автоматически генерируемого по шаблону:

create trigger SecurWrite BEFORE UPDATE OF

CustomerName

on CUSTOMER

REFERENCING OLD AS old1 NEW AS new1

for each row

/* ERwin Builtin Tue Jan 26 21:24:371999 7

/* default body for SecurWrite 7

begin

Insert into Security (OldName.NewName, UserUpdate, UpdateDate)

values (:old1.CustomerName,:new1.CustomerName, User, Sysdate);

end;

/

Ниже приведен текст SQL-команд и результат их выполнения (выполнены при помощи Oracle SQVPlus), иллюстрирующих работу триггера.

SQL> insert into CUSTOMER (CustomerlD, CustomerName) values (20/lvanov');

1 row created.

SQL> update CUSTOMER set CuslomerName='Petrov' where CustomerlD=20;

1 row updated.

SQL> select* from SECURITY;

UPDATEDATE OLDNAME NEWNAME USERUPDATE

–––––––––––––––––––––––––––––––––––––––––––––––––––––––

27-JAN-99 Ivanov Petrov SCOTT


Любое изменение имени клиента в таблице CUSTOMER фиксируется в таблице SECURITY, причем регистрируется прежнее значение имени, новое значение, дата изменения и имя пользователя, производившего изменения.

Перейти на страницу:

Похожие книги

3ds Max 2008
3ds Max 2008

Одни уверены, что нет лучшего способа обучения 3ds Мах, чем прочитать хорошую книгу. Другие склоняются к тому, что эффективнее учиться у преподавателя, который показывает, что и как нужно делать. Данное издание объединяет оба подхода. Его цель – сделать освоение 3ds Мах 2008 максимально быстрым и результативным. Часто после изучения книги у читателя возникают вопросы, почему не получился тот или иной пример. Видеокурс – это гарантия, что такие вопросы не возникнут: ведь автор не только рассказывает, но и показывает, как нужно работать в 3ds Мах.В отличие от большинства интерактивных курсов, где работа в 3ds Мах иллюстрируется на кубиках-шариках, данный видеокурс полностью практический. Все приемы работы с инструментами 3ds Мах 2008 показаны на конкретных примерах, благодаря чему после просмотра курса читатель сможет самостоятельно выполнять даже сложные проекты.

Владимир Антонович Верстак , Владимир Верстак

Программирование, программы, базы данных / Программное обеспечение / Книги по IT