тригери

Trigger база данни - е проектиран специално име блок PL / SQL, съхранявани в базата данни. Всеки тригер е свързан с определена маса и ORACLE стартира автоматично, когато един от ГСД-оператори (вмъкване, изтриване, UPDATE) или тяхната комбинация в тази таблица.

Определяне задействания. могат да се използват тригери:

1) за изпълнение на сложни ограничения интегритет на данните, които не могат да бъдат изпълнени в стандартен начин за създаване на маса;

2) да се предотврати неправилното сделка;

3) да извърши дължимите процедури за комплексна проверка на правата за достъп и защитата на личните данни;

4) генериране на някои изрази въз основа на наличните в колоните на таблицата стойности;

5) за прилагане на сложни бизнес правила за обработка на данни (способността да се проследи "ехо", т.е. възможността при смяна на една маса, свързани актуализирани данни таблиците).

Създаване и преминете задейства. следната обща синтаксис, използван за създаване и автоматично включване на спусъка:

CREATE [OR REPLACE] TRIGGER TRIGGER_NAME

ON таблица_име [за всеки ред] [КОГАТО състояние]

Ако има ключови думи или заменете спусъка е Възстановиха, ако вече съществува.

Дизайн преди | СЛЕД показва началното време на спусъка. ПРЕДИ опция означава, че спусъка ще се проведе преди извършване на активиране на ГСД-оператор; СЛЕД опция означава, че спусъка ще започне след активиране на ГСД-оператора.

Дизайн INSERT | DELETE | UPDATE [НА column_list] показва вида на активиране на спусъка ГСД-оператора. Допустимо използване на логическата операция или посочете агрегат операторите на изпичане, например: вмъкнат или изтрият. При използване на изпълнение UPDATE списъка Комплект колони, спусъкът ще бъде изпълнена в модификацията на една от споменатите колони; ако няма списък на колони, на спусъка ще се задейства, когато някоя от колоните на таблицата, свързани с спусъка.

Дизайн за всеки ред показва характера на въздействието на спусъка: низ или оператор. Ако проектът за всеки ред е налице, спусъка е низ; при липса на спусъка е оператор. спусъка оператор управлява веднъж преди или след събуждане спусъка ГСД-оператор, без значение колко много редове в таблицата, свързани с спусъка е променен. String спусъка се изпълнява веднъж за всеки от линиите, които се подлагат на модификация ГСД-оператор активиране на спусъка.

С КОГАТО дума може да се настрои на допълнително ограничение, свързано с тригер линия на масата, с изменения, които могат да бъдат стартирани спусъка.

Структура PL / SQL_blok представлява PL / SQL блок, който ORACLE започва при задействане на спусъка.

Класификация задейства. По принцип се прави разлика dvenadtsattipov задейства. тип Trigger се определя от комбинация от следните три параметри:

1) естеството на въздействието върху спусъка линия свързана таблица (низ или оператор);

2) започва гранична точка: преди (преди) или след (след) активиране на изпълнение спусъка ГСД-оператор;

3) вида на активиране на спусъка ГСД-оператор (вмъкване, изтриване, обновяване);

Редът на активиране води. Ако таблицата има няколко типа тригери, те се активират, както следва:

1) държи спусъка оператор ПРЕДИ (ако са повече от един, няма нищо по реда на тяхното изпълнение е невъзможно да се каже);

2) притежава на спусъка низ ПРЕДИ;

3) притежава активиращ спусъка ГСД-оператор, последвано от проверка на ограничения интегритет на данните;

4) е спусък низ СЛЕД с последваща проверка на ограничения интегритет на данните;

5) притежава спусъка оператор СЛЕД.

Trigger предикати. Ако спусъка посочва набор от активиране на праговите DML-оператори (например, поставете или изтриване), признаването на това, което по-специално от DML-операторите се извършва на масата, свързани с спусъка, използвани праговите предикати: вмъкване, изтриване, актуализиране. Те са логически функции се връщат вярно, ако типа на оператора на активиращ съвпада с вида на предикат, и фалшиви - друго. За да посочите едно и също действие в случай на изпълнение на различните оператори в ГСД-тригер условен израз предикати комбинирани с помощта на логически оператори.

Pseudorecords. За струнен тригери, има специални проекти, които позволяват при изпълнение на ГСД-лайн оператори на масата, как да се справя старите стойности, които са били там преди промяната и новото, което ще се появи в един ред след нейното изменение. Тези структури се наричат ​​pseudorecords и определените стари и нови. Структурата на тези идентична структура pseudorecords линия изменяема маса, но може да работи само върху отделни полета pseudorecords. референтни pseudorecords Полеви се случва по следния начин: преди нова или стара е поставен символът ":", минаваща през точка, определена име на поле. Стойностите, които вземат поле pseudorecords когато стреляха DML-оператори са дефинирани както следва.

изявление INSERT - psevdozapis: нови еквивалент, за да вмъкнете редове и psevdozapis: стари всички полета е NULL.

Операторът DELETE - psevdozapis: стара е равностойно на линия, за да бъде изтрита, а psevdozapis: нови във всички области е нула.

UPDATE Оператор - psevdozapis: нова линия еквивалент, в резултат на модифицирани и psevdozapis: стари всички полета е стартовата линия.

Включване и изключване задейства. Съхранява се в спусъка на базата данни, можете временно да деактивирате, без да го изтриете от базата данни. За да направите това, използвайте следната команда:

ALTER TRIGGER TRIGGER_NAME ДЕАКТИВИРАНЕ;

Активиране на спусъка след определен период от време, колкото е възможно, с помощта на командата

ALTER TRIGGER TRIGGER_NAME даде възможност;

Забрани или да изпълнението на всички свързани със задействания маса, можете да използвате командата

ALTER TABLE таблица_име ALL тригери;

където ДЕАКТИВИРАЙТЕ опция се използва, за да изключите и опцията Разреши - да се даде възможност на всички спусъци на масата.

Премахване на спусъка в базата данни. .. Унищожаване на спусъка, т.е., отстраняване на спусъка от базата данни с помощта на следната команда:

DROP TRIGGER TRIGGER_NAME;

Получаване на информация за тригери. Тригери се съхраняват в базата данни, така че информация за тях може да бъде получена от речника на представителство USER_TRIGGERS данни, например, следната команда:

SELECT * ОТ USER_TRIGGERS;

1. Създаване на спусъка, че преди да поставите следващия ред в таблицата проверки KNIGA_POSTAVKA, посочени в таблица kodaknigi КНИГА. При липса на споменатите кодови книги в КНИГА маса трябва да бъдат генерирани с подходящо изключение съобщение.

Добавянето на нови редове в таблицата по-KNIGA_POS TAVKA изпълнен изявление INSERT. От спусъка трябва да работи преди всяко изявление INSERT, че поради това трябва да бъде низ ПРЕДИ-спусъка. За да се запази целостта на данните, трябва да се провери дали кодовете, въведени от книги и КНИГА маса. За да направите това само с един-оператор SELECT извършва примерна таблица КНИГА данни в състояние, при което пробата се използва KOD_KNIGI полеви pseudorecords: ново. Ако броят на редове с данни в таблица книга код книга ще бъде нула, и ще се хвърлят да се издаде съобщение изключение.

Създаване на спусъка TR1 се осъществява чрез въвеждане на следната декларация:

CREATE OR REPLACE TRIGGER TR1

ПРЕДИ вмъкване KNIGA_POSTAVKA

SELECT COUNT (*) В KOL ОТ КНИГА

КЪДЕТО KOD_KNIGI =: NEW.KOD_KNIGI;

АКО KOL = 0, тогава RAISE_APPLICATION_ERROR

(-20 212, "Таблицата книга няма информация за тази книга");

Действието на спусъка TR1 могат да бъдат тествани изпълнение на настоящото последващи оператор, носещ вложка в съответствие KNIGA_POSTAVKA маса, като по този начин причинява активиране на спусъка TR2 на:

Вмъкнете в KNIGA_POSTAVKA стойности (21,15, "Иванов", 15,

От книгата с кодове 15 липсва в КНИГА маса, изключение ще бъдат хвърлени и се издава съобщението.

2. Създаване на задействане, което забранява на решения в областта на стойност КНИГА ред в таблицата ЦЕНА повече от 5000 рубли, както и до увеличаване на цените на книгите, за които информация се съхранява в КНИГА маса, повече от 20%. Ако нарушите това изискване следва да се хвърли изключение с подходящи послания.

От въвеждането на нови редове в таблица КНИГА осъществява чрез извършване на изявление INSERT, и стойност на КНИГА маса поле ЦЕНА съдържащ цената на книгата може да се променя в резултат на UPDATE оператор, спусъка е посочено множество задействане DML-оператори. От спусъка трябва да се започне, преди да изпрати всеки от споменатите DML-оператори, поради което е низ ПРЕДИ-спусъка. Както действията, извършвани от тригери са различни за всяка от задействат DML-отчети модифициращи маса КНИГА, е да разпознава типа на ГСД-оператор, като се използват подходящи праговите предикатите вмъкване и UPDAITING. Поради факта, че при поставяне нов редове проверка трябва да бъде подложен на нова стойност поле ЦЕНА, както и в областта ЦЕНА новата стойност на модификация стойност да се сравнят със старата стойност трябва да се използва pseudorecords: нови и: стари.

Създаване на спусъка TR2 е направено с помощта на следното твърдение:

CREATE OR REPLACE TRIGGER TR2

ПРЕДИ вмъкване или обновяване на на цената върху КНИГА

АКО ПОСТАВЯНЕ ТОГАВА

АКО: NEW.TSENA> 5000 ТОГАВА

Ако актуализирането ТОГАВА

ИПИ: NEW.TSENA>: ​​OLD.TSENA * 1.2 ТОГАВА

Действието на спусъка TR2 на могат да бъдат тествани за изпълнението на следните оператори, които, носещи вложка в редове и редове КНИГА актуализация на маса КНИГА, като по този начин причинява неговото активиране.

линии вмъкват оператора в КНИГА маса, което води до активиране на спусъка TR2 на:

Вмъкнете в книга СТОЙНОСТИ (21, "Дюн '' Хърбърт", 5268 "AST"

актуализации на оператора редове в таблица КНИГА предизвикват активиране на спусъка TR2 на:

UPDATE КНИГА зададената цена = 6000;

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

3. Създаване на спусъка, който е създал в таблицата с STAT, съдържаща колони:

име на издателя - IZD,

броят на книгите в "роман" жанр - KOL_ROM,

брой книги в жанра на "фантастика» - KOL_FAN,

при всяка промяна КНИГА генерира и съхранява таблицата в съответните колони на таблицата Stat общия брой книги за всеки един от посочените издатели секционни теми: "римски" и "фантастика".

Модификация КНИГА маса извършва ГСД-изпълнението на следните оператори: вмъкване, изтриване или модифициране изявление UPDATE ценности ЖАНР КНИГА колона в таблицата. Тъй действие върху образуването на маса STAT данни извършва след всеки от операторите на модифициращата маса книга, по вид оператор е СЛЕД-тригер. Както действия, извършени от тригери са едни и същи за всички видове активиране на неговите оператори, задействане на предикатите не се използват. Преди да създадете таблица, тригер трябва да бъде създаден STAT.

Създаване на таблица STAT може да бъде постигнато чрез въвеждане на следващия набор от оператори:

DROP TABLE STAT;

Създаване на таблица STAT

Създаване на спусъка TR3 е направено с помощта на следното твърдение:

CREATE OR REPLACE TRIGGER TR3

СЛЕД INSERT или изтриване или актуализиране на ЖАНР

Стрелка V1 е SELECT Publishing,

ОТ КЪДЕ КНИГА Жанр = 'Роман "

ПУБЛИКУВАНЕ GROUP BY;

Стрелка V2 е SELECT Publishing,

ОТ КЪДЕ КНИГА Жанр = 'фантастика "

ПУБЛИКУВАНЕ GROUP BY;

Изтрий от STAT;

ЗА ПО Z1 V1 LOOP

INSERT INTO STAT стойности (Z1.IZDATELSTVO,

ЗА ПО Z1 V2 LOOP

UPDATE STAT SET KOL_FAN = Z1.KOL2

КЪДЕТО IZD = Z1.IZDATELSTVO;

АКО SQL% NOTFOUND ТОГАВА

Поставете в STAT стойности (Z1.IZDATELSTVO, 0,

Trigger за действие може да бъде проверена за изпълнението на следните оператори, които носещи вложки книга редове в таблицата, актуализира и изтрива редове книга редове в таблицата, като по този начин предизвиква активиране на спусъка TR3 на.

Операторите вмъкнете редове в книга на масата, която активира на спусъка TR3 на:

Вмъкнете в книга стойности (46, "Еретиците на Дюн", "Херберт ', 368,

Вмъкнете в книга стойности (42, "Ингвар и Елша"

"Никитин ', 168' Ast", "нов");

Операторите изтривате редове от таблица КНИГА предизвиква активиране на спусъка TR3 на:

DELETE КНИГА КЪДЕТО NAME = "казаци;

Операторите модификация книга редове в таблицата, което води до активиране на спусъка TR3 на:

UPDATE КНИГА SET ЖАНР = 'фантастика ", когато NAME =

SELECT * ОТ STAT;