Ответы на экзаменационные вопросы № 1-25 по дисциплине "Информационные системы" (Недостаточность файловых систем для инф.технологий. Представления реляционных баз данных), страница 12

CREATE TRIGGER INS_Stud ON Students

INSTEAD OF INSERT AS

declare @num int, @fam char(20), @nam char(20), @stip decimal(4,2)

select @fam = ins.sfam from inserted ins

select @nam = ins.snam from inserted ins

select @stip = ins.stip from inserted ins

select @num = max(snum) from students

INSERT INTO Students(snum, sfam, snam,stip)

VALUES (@num+1, @fam, @nam, @stip)

2. CREATE TRIGGER ST_Del ON Students

INSTEAD OF DELETE AS

declare @num int

select @num = del.snum from deleted del

if EXISTS (select * from usp where snum=@num)

delete from usp where snum=@num

delete from students where snum=@num

кроме поддержания ссылочной целостности триггеры могут использоваться для формирования каскадного взаимодействия, например, при выполнении операции вставки в таблицу Students информация об этом студенте должна быть занесена и в usp.

3. CREATE TRIGGER INS_S ON Students

FOR INSERT AS

declare @k_m int, @k_s int

select @k_m = max(unum) from usp

select @k_s = ins.snum from inserted ins

INSERT INTO usp(unum, snum)

VALUES (@k_m+1, @k_s)

Триггеры могут использоваться для ведения статистики изменения информации в БД.

4. подсчет количества экзаменов, сданных в каждый день

CREATE TRIGGER OC_DAY ON usp

FOR  INSERT AS

If exists (select * from stat where dat=GetDate())

UPDATE stat set kol_vo = kol_vo+1 where dat=GetDate()

Else

INSERT INTO stat values (1,GetDate())

5. триггеры для проверки правильности ввода значения поля

CREATE TRIGGER Upd_OC ON usp

FOR UPDATE AS

declare @oc int, @nom int

if update (ocenka)

begin

select @oc=ocenka, @nom=unum from usp

if (@oc>1) and (@oc<6)

UPDATE usp set ocenka=@oc where unum=@nom

Else

UPDATE usp set ocenks=null where unum=@nom

End

Ограничения на создание триггера:

  Нельзя использовать в триггерах операторы создания, удаления и изменения объекта в БД (create, drop, alter)

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

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

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

Действия

Хр.процед.

триггеры

Называются

+

-

Используют локальные переменные

+

+

Используют глобальные переменные

+

-

Используют операторы DML

+

+

Используют операторы DDL

+

-

Расположены на сервере

+

+

Используются для ведения статистики

-

+

Используются для поддержания ссылочной целостности

+

+

Вызываются автоматически

-

+

28. Использование курсоров в SQL.

Курсоры – область памяти БД, в которой сохраняется результат последнего оператора SQL (запрос). Курсор обычно используется для извлечения порций данных из БД, при этом программа получает возможность анализировать текущее состояние строки курсора.

DACLARE <имя> CURSOR FOR <команда>

Команда определяет выполняемый запрос, задет имя и связывает результаты запроса с указанным курсором. Но запрос оператор не выполняет.

OPEN <имя курсора>  - открытие курсора, дает команду SQL выполнить запрос, который указан в курсоре, а результат сохраняется в области памяти. Указанная строка становится текущей строкой курсора.

Извлечение данных из курсора:

FETCH [NEXT | PRIOR | FIRST | LAST | ABSOLUTE <n> | RELATIVE <n>] FROM <курсор> [INTO <переменная>]

- извлекает на экран или в указанные переменные. Текущая строка (по умолчанию) – NEXT, PRIOR – следующая строка, FIRST – первая, LAST – последняя, ABSOLUTE <n> - строка с номером n, RELATIVE <n> - n строка относительно текущей.