Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв Тюмень РСПСИТ 2010-12-14 Послан в Тюмень....doc
Скачиваний:
18
Добавлен:
24.04.2019
Размер:
5.82 Mб
Скачать

3.3.6. Объекты физической памяти

Для задания объектов физической памяти (для некоторых СУБД, например ORACLE) и групп файлов с таблицами (MS SQL Server) используются команды Database/Tablespaces, Database/Roolbark Segments, Database/Databases и Database/File Groups соот­вет­ственно.

3.3.7. Триггеры и хранимые процедуры

Триггеры и хранимые процедуры представляют собой именованные бло­ки команд SQL, откомпилированные и хранимые на сервере базы дан­ных. Хранимая процедура может вызываться из приложения или из дру­гой хранимой процедуры или триггера. Триггер выполняется автома­ти­чес­ки при наступлении некоторого события: вставки, удаления или из­ме­не­ния строки таблицы. Триггер ссылочной целостности (RI‑триггер) реализует правила ссылочной целостности. По умолчанию RI‑триггер реализует объявленную ссылочную целостность (п. 3.2.3).

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

Можно переопределить триггер, установленный по умолчанию од­ним из способов:

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

  • Переопределение шаблона триггера для связи. Для конкретной свя­зи создать переопределенный шаблон и использовать его вместо при­ме­ня­емого по умолчанию при включенной опции Relationship Override при генерации схемы.

  • Переопределение шаблона триггера для сущности. Для конкрет­ной сущности создать переопределенный шаблон и использовать его вмес­то при­ме­ня­емого по умолчанию при включенной опции Entity Override при генерации схемы.

П ример переопределения шаблона тригера для сущности. Создадим таблицу Архив клиентов, в которую будут записываться: дата изменения (DK), имя пользователя, производившего изменния (User), старые (KKOLD, NKOLD) и новые (KKNEW, NKNEW) значе­ния колонок изменяемой стро­ки таблицы Клиент (рисунок 3.3.7.1).

Рисунок 3.3.7.1. Таблицы клиентов и архива клиентов

  1. Выполним команду Triggers из контекстного меню таблицы Кли­ент и нажмем кнопку New для создания триггера SaveValues (рисунок 3.3.7.2).

  2. На странице General установим параметры. В полях Old и New укажем имена ссылок на старые и новые значения.

  3. На странице Code откорректируем заготовку триггера (изменения в тексте выделены шрифтом):

create trigger %TriggerName

%Fire %Actions(" or ")

on %TableName

%RefClause

%Scope

/* ERWin Builtin %Datetime */

/* default body for %TriggerName */

declare numrows INTEGER;

begin

insert into Arxiv_Klient (DK, KKOLD, NKOLD, KKNEW,NKNEW)

Values (Sysdate, User,

:old1.KlientKK, old1.KlientNK, :new1.KlientKK, new1.KlientNK);

end;

/

  1. На странице Expanded можно увидеть код триггера в терминах выбранной СУБД ORACLE:

create trigger SaveValues

BEFORE UPDATE OF

КК,

NK

on Klient

REFERENCING OLD AS old1 NEW AS new1

for each row

/* ERWin Builtin Sun Nov 17 21:19:00 2002 */

/* default body for SaveValues */

declare numrows INTEGER;

begin

insert into Arxiv_Klient (DK, KKOLD, NKOLD, KKNEW,NKNEW)

Values (Sysdate, User,

:old1.KlientKK, old1.KlientNK, :new1.KlientKK, new1.KlientNK);

end;

/

Рисунок 3.3.7.2. Окно редактирования триггеров

Для редактирования текста триггера можно воспользоваться редак­то­ром, вызываемым кнопкой Toolbox на странице Code (рисунок 3.3.7.3).

Рисунок 3.3.7.3. Окно редактора текста триггера

В окне Macros находится список макросов (прил. 2). Синтаксис и пример макроса приводится в окне Description. Для включения макроса в шаблон триггера на странице Code используется кнопка Insert Macro.

Для изменения шаблона триггера ссылочной целостности исполь­зу­ет­ся команда Relationship Template из контекстного меню связи (рисунок 3.3.7.4). Для изменения шаблона нужно выделить тип триггера в спис­ке Referential Integrity Type, нажать кнопку Deach (для отсоединения шаблона, связан­ного с выбранным триггером). В списке Buildin Trigger Template или User Override следует выбрать шаблон, который нужно связать с выбранным триггером. Кнопкой Attach нужно связать триггер с выбранным шаблоном. Текст шаблона поя­­вится в окне Template Code. Кнопкой Rebind можно отменить свя­зы­вание. Для создания шаблона нужно указать его имя в поле Template Name и нажать кнопку Macro Toolbox. Кнопкой Add/Delete можно до­ба­вить/уда­лить макрос. Анало­гич­ным образом переопределяется шаблон для связи.

Для создания хранимой процедуры нужно выполнить команду Stored Procedures из контекстного меню таблицы (рисунок 3.3.7.5).

Рисунок 3.3.7.4. Окно переопределения шаблона триггера связи

Рисунок 3.3.7.5. Окно редактирования хранимых процедур

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

В примере процедура HisloKlientov подсчитывает число клиентов (рисунок 3.3.7.5). На странице Expanded можно увидеть код триггера в тер­ми­нах выбранной СУБД ORACLE:

CREATE PROCEDURE

HisloKlientovКлиент

(N out integer) is

begin

Select Count(*) into N

from Клиент

end HisloKlientovКлиент

Кнопкой Browser (рисунок 3.3.7.5) можно вызвать окно просмотра храни­мых процедур (рисунок 3.3.7.6).

Рисунок 3.3.7.6. Окно просмотра хранимых процедур

Списки Unattаched Table и Attаched Table содержат имена таблиц, не свя­занных и связанных с процедурой соответственно.

Командой Database/Stored Procedures/ModelLevel можно связать хра­нимые процедуры с моделью.

Командой Database/Pre & Post Scropts можно указать скрипты (бло­ки команд) SQL, которые выполняются до или после генерации таблицы (Table‑Level ) или всей схемы (Model‑Level), например удаление старой и создание новой базы.