Sql Пълно ръководство
И тук е друг спусък, който решава проблема от различен вид. Той следи опитите да се премахне от базата данни на записи на клиентите, за които има данни за поръчките. Намирането на такава ситуация, спусъка отменя цялата сделка, включително заличава инструкция, в отговор на което спусъкът е причинена от:
създаване на спусъка СНК дел Клиент
/ * Спусъкът който активира когато изтриване на записи
COSTOMERS на маса * / на клиентите за изтриване като
/ * Ние разберете дали има поръчки за изтриване на клиента * / ако (изберете броя (*)
поръчки / изтрити където orders.cust = изтрит. Клиент бр)> 0 започне
Премахване на печата невъзможно има поръчки rdiserror 31234
Trigger, свързани с изявление актуализация в Transact-SQL дава възможност да разберете точно кои колони на таблица са се променили, и в отговор да предприеме съответните действия. За да направите това, спусък да използвате специален формуляр на декларацията, ако - ако актуализация. Следващата спусъка се активира в отговор на записите на актуализация в salesreps маса и извършва различни действия в зависимост от това коя от промените в колони, от същата квота или продажби.
създаване на спусъка UPD повторения
/ * Trigger aktiviziruyuschiysch при обновяване записи
Таблица SALESREPS * / на salesreps за актуализация като
/ * Process Обновете КВОТА колона * /
/ * Процеса на актуализация ПРОДАЖБИ колона * на /
Задействащи в диалект Informix
в Informix задейства прекалено са създадени с помощта създаде изявление спусъка. Както и в Transact-SQL, това твърдение определя името на спусъка, на масата, с които той е свързан, както и действия, в отговор на което се изпълняват. Ето няколко примера, които илюстрират синтаксис:
Създаване предизвика нови SLS
поставете върху salesreps.
създаване на спусъка дел CUS СНК изтриване на клиенти.
създаване на спусъка РСР актуализация UPD на поръчки.
създаване на спусъка SLS UPD
актуализиране на квотата, продажби на salesreps
Последно тригер се активира само в отговор на актуализация даден salesreps колони от таблицата.
Informix ви позволява да определите кога трябва да се нарича, за да създадете тригери
преди - спусъка се извиква преди всички промени, когато не ред на свързаната таблица не е бил променен;
след - спусъка се нарича след всички промени, когато всички редове от таблицата, свързан е бил променен;
за всеки ред - спусъка се нарича за всеки ред, за да бъде изменена, и тя е на разположение стара и нова версия на линията и двете.
За всяка от тези стъпки в отделна задействане може да бъде определена последователност от действия. Така например, на спусъка може да доведе до съхранената процедура за изчисляване на общата стойност на поръчките, преди актуализацията на поръчки маса, а след това отговори на актуализация на всеки ред, а след това изчислява общата стойност на поръчките, след актуализацията на всички необходими документи. Ето дефиницията на тригер, която работи по следния начин:
създаване на спусъка UPD РСР
актуализация на сума по заповед, позовавайки се на стара, колкото и преди новия пост като
/ Изчислете общата стойност на поръчката си, преди да актуализирате * / преди (извършете процедурата за добавяне на поръчки () в старата общо;)
/ * Проследяване на увеличението и намалението на индивидуални поръчки * / за всеки ред
когато (post.amount
/ * Напиши в отделна таблица
информация за намалени поръчки * / вмъкнете в РСР по-малко стойности (pre.cust,
дата pre.order, pre.amount, post.amount), когато (post.amount> pre.amount)
/ * Напиши в отделна таблица
информация за увеличението на поръчки * / вмъкнете в РСР повече стойности (предварително. Клиент,
дата pre.order, pre.amount, post.amount)
/ * След таблицата за ъпгрейд се преизчислява
общата стойност на поръчките * / след (извършете процедурата за добавяне на поръчки () в новата обща;)
Предложението преди спусъка показва, че преди да започне актуализация за изпълнение на инструкции, съхранената процедура добавяте или-пондери трябва да се нарича Предполага се, че тази процедура изчислява общата стойност на поръчките, а резултатът се съхранява в променлива OLD общото. По същия начин, предложението
след като установи, че една и съща съхранената процедура се нарича в края на vtolneniya ръчно актуализиране и аз го въведената стойност в друга локална променлива се върне - новата обща цена. Оферта за всеки ред определя действието, което трябва да се направи за всяка актуализирана ред на таблицата. Така че в нашия пример е да се впишете линия в една от двете таблици, което от двете е дали сегашните обработване на поръчките намаляват или се увеличават Тези таблици съдържат клиентски идентификационни номера, дата на поръчката, както и стари и нови сума. За да се получи тази информация, спусъка е необходим достъп до старото (преди промяната) и новото (след смяната) стойността на реферирането на низ Оферта определя имената, които ще се използват за означаване на двете версии на текущия ред в този пример, да се позове на старите стойности на колони с използване на псевдоним предварително, и да се позова на новите стойности - псевдоним пост. Тези имена не са предварително дефинирани - можете да дадете име на таблицата, както ви е удобно.
За разлика от други бази данни, на Informix ofanichivaet набор от действия, които могат да се изпълняват от спусъка. Разрешени са само.
поставете инструкция; м инструкция изтриване;
INSfuKTsIYa изпълни процедура.
Въпреки това, последната опция предвижда още известна гъвкавост. Причинява процедура figgerom може vsholnyat почти всяко действие, което може да бъде произведено от figgerom.
Задействащи в Oracle PL / SQL диалект
Oracle във възможността за създаване на по-широк от figgerov Informix и Transact-SQL в тази база данни, за да създадете figgerov също така да създадете отчет спусъка се използва, но неговата структура е различна. Подобно на Informix, тя позволява да се сдружават спусъка с различните етапи за обработка на заявката, но на различни нива Veh
инструкция ниво Trigger (декларация) се нарича по веднъж за всеки SQL изявление. Това може да бъде причинено преди или след неговото изпълнение.
на нивото на запис Trigger (ред), се нарича по веднъж за всеки запис се променя. Той може също да бъде използвана преди или след промяната,
Замяна спусък (вместо) се провежда вместо SQL insfuktsii. С такъв спусъка, можете да следите за кандидатстване и за потребител, опитите за да актуализирате, добавяте или изтривате записи, и вместо тези действия vsholnyat сами. Можете да определите figger да се извършва вместо или на мястото на някои insfuktsii всеки опит за промяна Кофс маса. Общо Оказва се, 14 различни видове тригери. Дванадесет от тях - тази комбинация от операции вмъкване, актуализиране и изтриване с опции преди или след или на нивото на изявление ред (3x2x2) плюс две figgera написали вместо ред и изявление ниво. Въпреки това, на практика на релационна база данни Oracle води, вместо вида се използват рядко; Те бяха въведени в оракули в подкрепа на някои от най-новите обектно-ориентирани възможности.
Това са общо дефинирани figgerov в Oracle PL / SQL, които изпълняват същата роля като спусъка е трудно за Informix от предишния parafafa. В Oracle, този проблем е решен с помощта на три задействания: два от тях - това предизвиква етап преди и след, като действа по insfuktsii ниво и Фетие се извършва за всеки ред се актуализира.