Смекни!
smekni.com

Проектирование информационных систем 3 (стр. 10 из 17)

Очередность выполнения [POSITION номер], в случае нескольких триггеров не одно действие и отношение к нему.

В предложении AS записывается тело в операторном блоке

BEGIN <тело_триггера> END

6.6 Вопрос.

Сколько триггеров можно определить к одной таблице?

1. Один в дочерней таблице.

2. По одному в дочерней и в родительской.

3. По количеству действий над таблицей.

4. Определяется спецификацией языка.

5. Определено в конкретной реализации СУБД.

6.7 Тело триггера.

Программный код триггера (тело триггера) состоит из операторов процедурного языка, заключенного в блок

BEGIN

<compound_statement> [<compound_statement> ...]

END

Программный код состоит из команд специального процедурного языка, реализуемого в той или иной интерпретации конкретного SQL – сервера.

Часть операторов будут рассмотрены в следующих лекциях, посвященных хранимым процедурам.

6.8 Операторы языка.

Алгоритмический язык триггеров и хранимых процедур

Объявление локальных переменных

DECLARE VARIABLE <имя переменной> <тип данных>;

Операторные скобки BEGIN ... END

Оператор присваивания

Имя переменной = выражение;

Оператор условного перехода IF... THEN ... ELSE

IF (<условие>) THEN

< оператор 1>

[ELSE < оператор 2>]

6.9 Операторы языка.

Оператор выбора SELECT, отличие в предложении INTO

SELECT AVG(KOLVO), SUM(KOLVO) FROM RASHOD

WHERE TOVAR = :INTOVAR

INTO :AVG_KOLVO, :SUM_KOLVO;

Оператор FOR SELECT ... DO

FOR

<оператор SELECT>

DO

< оператор>;

Оператор SUSPEND , возврат значений в вызываемую процедуру.

6.10 Операторы языка.

Оператор WHILE ... DO

WHILE (<условие>) DO <оператор>

Оператор EXIT

Оператор POST _EVENT

POST_EVENT "Имя события";

Оператор EXECUTE PROCEDURE

EXECUTE PROCEDURE имя

[параметр [, параметр ]]

[RETURNING_VALUES параметр [, параметр ...]];

6.11 Операторы OLD и NEW.

Оператор версии значения OLD и NEW изменяемого поля (контекстные переменные), позволяют обрушатся к старому (хранящемуся в поле) значению и к новому, пришедшему в операторе. Например, при каскадном изменении связанных таблиц используется следующая конструкция:

IF (OLD.ПoлeCвязиPoдитeля <> NEW.ПолеСвязиРодителя)

THEN UPDATE ДочерняяТаблица

SET ПолеСвязиДочернейТаблицы = NEW.ПолеСвязиРодителя

WHERE ПолеСвязиДочернейТаблицы = OLD.ПoлeCвязиPoдитeля;

при изменении столбца связи в родительской таблице будет изменено значение столбца связи у записей соответствующих дочерних таблиц.

6.12 Терминатор.

Для работы в IB Console необходимо переопределять терминатор (символ, завершающий оператор программного кода).

Выполняется оператором:

SET TERM !! ;

CREATE TRIGGER . . .

. . .

END !!

SET TERM ; !!

После кода триггера, значение терминатора возвращается в предыдущее. Последний оператор END тела триггера должен заканчиваться знаком терминатора !!

6.13 Создание в Expert.

Функция «Новый триггер», контекстного меню.

6.14 Параметры.

Имя триггера.

Ассоциированная таблица.

Порядок, по умолчанию 0.

Тип действия.

Операторы тела.

6.15 Изменение триггера.

Изменить существующий триггер можно при помощи оператора

ALTER TRIGGER ИмяТриггера FOR ИмяТаблицы

[ACTIVE | INACTIVE]

{BEFORE | AFTER)

{DELETE | INSERT | UPDATE}

[POSITION номер] AS <тело триггера>

Имя триггера должно совпадать с именем существующего триггера базы данных.

6.16 Удаление триггера.

Для удаления триггера следует воспользоваться оператором

DROP TRIGGER ИмяТриггера

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

6.17 Примеры.

Для таблицы CREATE TABLE "NE1"("a1" INTEGER NOT NULL primary key,

"a2" CHAR(10), "a3" VARCHAR(10))

Создадим генератор: CREATE GENERATOR G1

Создаем триггер:

CREATE TRIGGER TR1 FOR "NE1"

ACTIVE BEFORE INSERT POSITION 0

AS begin

NEW."a1"= GEN_ID(g1,1);

End

Проверяем работу генератора.

insert into ne1( "a2", "a3") values ('aa','фф') или по всем полям

insert into ne1 values (1,'aa','фф')

6.18 Предустановленные значения.

Ведение архива изменений БД, предусматривает задание пользователя, сделавшего изменения и времени, когда совершалось изменение.

Для определения этих параметров на сервере определены специальные переменные:

"NOW" и USER

Для фиксирования значений таблицы архива должны содержать соответствующие поля:

DAT_IZM TIMESTAMP,

USER_NAME CHAR(15),

Значение текущей даты имеет универсальный формат для любого типа поля, например DATE или TIME.

6.19 Вопросы по 3 лабораторной.

Объяснить необходимость обязательного определения первичного ключа в таблице.

В чем заключается смысл ссылочной целостности данных в реляционной модели.

Операторы определения ссылочной целостности данных, каскадного обновления и удаления.

SQL - оператор создания триггеров, алгоритмический язык проектирования триггеров.

Формат заголовка триггера, определение очередности срабатывания.

Формат определения старых и новых значений полей ассоциированной таблицы.

Определение тела триггера для заполнения автоинкрементного поля значением генератора.

Организация каскадных воздействий в таблицах при помощи триггеров.

Использование механизма триггеров для ведения архивов изменений в таблицах базы данных.

6.20 Задания СРСП.

1. Защита выбора механизма каскадного ведения данных.

2. Выбор и защита сложного бизнес – правила, реализуемого триггером.

3. Ответить на контрольные вопросы третьего модуля [1];

4. Провести отладку SQL – кода спроектированных триггеров;

5. Защитить отчет по третьей лабораторной работе;

6. Защитить отчет по разделу 3.3 курсовой работы [2];

7. Тест первого рубежного контроля.

8. Разработать пример вопроса тестового задания по теме раздела.

6.21 Задания СРС.

1. Изучить методические указания к третьей лабораторной работе [1];

2. Ответить на примеры тестовых заданий к третьему модулю [1];

3. Изучить SQL - код триггеров, используемых в учебной БД (FONEBOOK.GDB);

4. Проектирование и использование генераторов;

5. Изучение системы помощи (HELP), утилиты InteractivSQL, операторы: CREATE TRIGGER, ALTER TRIGGER, DROP TRIGGER, CREATE GENERATOR, SET GENERATOR, INSERT, UPDATA, DELETE;

6. Изучить конспект 5,6 лекций [3];

7. Среда управления SQL – сервера - IBExpress.

6.22 Демонстрация.

Создание триггера в среде IB Console.

Создание триггера заполнения автоинкрементного поля.

Оператор INSERT в таблицу с автоинкрементным полем.

Демонстрация изменения триггера.

Примеры реализации сложных бизнес правил.

Пробное тестирование.

6.23 Правила электронного тестирования.

1. Можно пропустить (не заполнять ячейку) несколько (2-3) вопроса для обсуждения на апелляции, нельзя пропускать 40-ой вопрос.

2. Если Вы не успели ответить на вопрос, но у Вас осталось время, можно в присутствии преподавателя вернуться к пропущенному вопросу, для проставления ответа.

3. При тестировании нельзя прокручивать список вопросов в обратную сторону.

4. Для перехода вперед, не дожидаясь срабатывания таймера достаточно кликнуть мышкой или нажать «стрелку вниз».

5. Ответы проставляются сразу в лист ответов без промежуточной записи.

6.24 Тренировочный тест, 10 вопросов.

Ответы

1 2 3 4 5 6 7 8 9 10

7 ХРАНИМЫЕ ПРОЦЕДУРЫ

7.1 Механизм хранимых процедур (Stored Procedures).

Определение и назначение.

Формат оператора создания объекта.

Преимущества использования.

Алгоритмический язык.

Проектирование в среде IBExpert.

Примеры реализации.

Вызов хранимых процедур в приложении.

Компоненты Delphi для работы с хранимыми процедурами.

IBStoredProc – вызов ХП действия.

IBQuery – вызов ХП выбора.

Совместимость переменных SQL – сервера и среды разработки Delphi.

Тренировочный тест к рубежному контролю.

7.2 Определение.

Хранимая процедура (Stored procedures) - это модуль, написанный на процедурном языке и хранящийся в базе данных как метаданные.

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

7.3 Типы процедур.

Процедуры выбора могут возвращать более одного значения. В приложении имя хранимой процедуры выбора подставляется в оператор SELECT вместо имени таблицы или просмотра.

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

Хранимым процедурам можно передавать данные и получать обратно значения параметров, измененные в соответствии с алгоритмами работы хранимых процедур.

7.4 Преимущества.

Преимущества использования хранимых процедур:

1 одну процедуру можно использоваться многими приложениями;

2 разгрузка приложений клиента путем переноса части кода на сервер и вследствие этого - упрощение клиентских приложений;

3 при изменении хранимой процедуры все изменения немедленно становятся доступны для всех клиентских приложений; при внесении же изменений в приложение клиента требуется повторное распространение новой версии клиентского приложения между пользователями;

4 улучшенные характеристики выполнения, связанные с тем, что хранимые процедуры выполняются сервером, в частности - уменьшенный сетевой трафик.

7.5 Оператор создания.

Оператор создания хранимой процедуры:

CREATE PROCEDURE name

[(param <datatype> [, param <datatype> ...])]

[RETURNS param <datatype> [, param <datatype> ...])]

AS

DECLARE VARIABLE var <datatype>;

[DECLARE VARIABLE var <datatype>; ...]

BEGIN

<compound_statement>

[<compound_statement> ...]

END

7.6 Алгоритмический язык.

Объявление локальных переменных

DECLARE VARIABLE <имя переменной > <тип данных>;