Тригери - Studiopedia
Всъщност тригерът е специален вид съхранена процедура, коятоSQL сървърът извиква, когато извършва операции за модификация на съответните таблици. Тригерът се активира автоматично, когато се изпълни операцията, с която е свързан. Тригерите са свързани с една или повече операции за актуализиране на една и съща таблица.
Различните търговски СУБД разглеждат различни тригери. И така, в MS SQL Server тригерите се дефинират само като постфилтри, т.е. тригери, които се изпълняват след настъпването на събитието.
Oracle DBMS дефинира два типа тригери: тригери, които могат да бъдат задействани преди изпълнението на операцията за модификация, наричат се тригери ПРЕДИ и тригери, които се активират след извършване на съответната модификация, подобно на тригерите на MS SQL Server, те се наричат тригери СЛЕД.
Тригерите могат ефективно да се използват за поддържане на семантичната цялост на базата данни, но техният приоритет е по-нисък от приоритета на правилата за ограничения (ограничения), зададени на нивото на описанията на таблиците и на нивото на връзките между таблиците. Когато пишете тригери, винаги трябва да имате това предвид; ако декларативните правила за референтна цялост на DRI са нарушени, тригерът може просто никога да не работи.
В стандарта SQL1 не са дефинирани нито запомнени процедури, нито тригери. Но в допълнение към стандарта SQL2, издаден през 1996 г., и двата обекта бяха стандартизирани и дефинирани.
Специална команда се използва за създаване на тригери:
СЪЗДАВАНЕ НА ТРИГЕР ВКЛ
SQL изрази (тяло на тригера)
Името на тригера е идентификатор във вградения език за програмиране на СУБД и трябва да отговаря на съответните изисквания.
Параметърът FOR указва една или повече операциимодификации, които задействат този тригер.
Опцията WITH ENCRIPTING има същото значение като за съхранените процедури, тя скрива оригиналния текст на тялото на тригера.
Има няколко правила, които ограничават набора от изрази, които могат да се използват в тялото на тригер.
Така че в повечето СУБД се прилагат следните ограничения:
- Операциите за създаване на обекти на база данни (нова база данни, нова таблица, нов индекс, нова съхранена процедура, нов тригер, нови индекси, нови изгледи) не могат да се използват в тялото на тригера.
- Не можете да използвате командата за изпускане на обект DROP в тригер за всички типове основни обекти на база данни.
- Командите за промяна на базови обекти ALTER TABLE, ALTER DATABASE не могат да се използват в тялото на тригер.
- Не можете да промените правата за достъп до обекти на база данни, тоест да изпълните командата GRAND или REVOKE.
- Не можете да създадете тригер за изглед (VIEW) .
- За разлика от съхранените процедури, тригерът не може да върне никакви стойности, той се стартира автоматично от сървъра и не може да комуникира самостоятелно с който и да е клиент.
Нека разгледаме пример за тригер, който се задейства, когато копие на определена книга бъде изтрито, например, ако читател загуби тази книга. Какво може да направи този тригер? И може да извърши следната проверка: проверете дали в библиотеката е останало поне едно копие от тази книга и ако това е последното копие на книгата в библиотеката, тогава е разумно да премахнете описанието на книгата от тематичния каталог, така че нашите читатели да не се опитват да поръчат тази книга напразно.
Текстът на този тригер в Transact SQL е показан по-долу:
/* Проверете дали този тригер съществува в системната директория */
ако съществува (изберете * от sysobjects
където ) и sysstat& xf = 8)
пуснете тригер dbo.DEL_EXEMP
CREATE TRIGGER DEL_EXEMP НА dbo.EXEMPLAR
/* създаваме тригер в таблицата EXEMPLAR */
ЗА ИЗТРИВАНЕ /* само за операция за изтриване */
/* описва локални променливи */
ДЕКЛАРИРАЙТЕ @Ntek int
/* брой оставащи екземпляри на изтритата работна книга */
ДЕКЛАРИРАЙТЕ @DEL_EX VARCHAR(12)
/* шифър на отдалечен екземпляр*/
/* използвайки временната системна таблица, съдържаща изтритите записи, определя шифъра на книгата, съответстваща на последното изтрито копие */
SELECT @DEL_EX = ISBN от изтрит
/* извикване на съхранена процедура, която ще определи броя на копията на книга с даден шифър */
EXEC @Ntek = COUNT_EX @DEL_EX
/* Ако няма повече копия на тази книга, тогава премахваме записа в книгата от таблицата BOOKS */
IF @Ntek = 0 ИЗТРИВАНЕ от КНИГИ, КЪДЕТО BOOKS.ISBN = @DEL_EXENDGO
Не намерихте това, което търсихте? Използвайте търсачката:
Деактивирайте adBlock! и обновете страницата (F5)наистина е необходимо