Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БДиСУБД.docx
Скачиваний:
17
Добавлен:
19.11.2019
Размер:
494.91 Кб
Скачать

Триггеры

Триггераминазываютсяподпрограммы,которыевсегдавыполняютсяавтоматическинасторонесервера,вответнаизменениеданныхвтаблицахБД.

Триггерыиспользуюттотжевстроенныйязыкпрограммирования,чтоихранимыепроцедуры,ноотличаютсяотнихпреждевсеготем,чтотриггерыникогданевызываютсянапрямую,ниизклиентскихпрограмм,ниспомощьюIBConsole,ниизхранимыхпроцедурилидругихтриггеров.Затовтелетриггераможнообратитьсякхранимойпроцедуре.Триггерыначинаютдействоватьвответнакакоетособытие,например,удалилизаписьвтаблицеилиизменилизначениевкакомтополе.Крометого,втриггерахдобавленавозможностьобращатьсякстарыминовымзначениямстолбцовспомощьювстроенныхпеременныхOLDиNEW.

Триггерможетвыполнятьсявдвухфазахизмененияданных:до(Before)какоготособытия,илипосле(After)него.Синтаксисопределениятриггераследующий:

CREATETRIGGER<имя_триггера>FOR<имя_таблицы>

[ACTIVE|INACTIVE]

{BEFORE|AFTER}{DELETE|INSERT\UPDATE}

[POSITION<число>]

AS

[DECLARE[VARIABLE]<переменнаятип_данных>;]

BEGIN

<операторы_триггера>

END

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

[ACTIVE|INACTIVE]

Необязательныйпараметропределяет,будеттриггерзапускатьсявответнасобытие,илинебудет.ПоумолчаниюустанавливаетсяACTIVE,тоестьтриггербудетзапускаться.Отключениетриггераиногдаможетбытьполезнымприотладкеприложения.

{BEFORE|AFTER}{DELETE|INSERT|UPDATE}

Дваобязательныхпараметра,комбинациякоторыхможетзапрограммироватьтриггернашестьразличныхсобытий:

Таблица20.1..Вариантывозможныхсобытийтриггера

Комбинацияпараметров

Описание

BEFOREINSERT

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

AFTERINSERT

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

BEFOREDELETE

Триггервызываетсяпередудалениемзаписи.Чащевсегоегоиспользуютдляреализациибизнес-правил.

AFTERDELETE

Триггервызываетсяпослеудалениязаписи.Еготакжеиспользуютдляреализациибизнес-правил,либомодификациидругихтаблиц.

BEFOREUPDATE

Триггервызываетсяпередпринятиемновыхзначенийвполязаписи.Позволяетменятьвходныезначения.

AFTERUPDATE

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

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

[POSITION<число>]

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

AS

Какивхранимыхпроцедурах,командойASначинаетсятелотриггера.ПередоператорскойскобкойBEGINимеетсявозможностьобъявитьоднуилинескольколокальныхпеременных,еслионинужны,оператором

[DECLARE[VARIABLE]<переменнаятип_данных>;]