Създаване на спусъка

SQL тригери са специален тип съхранени процедури, започнати автоматично от сървъра, когато данните (DML) в таблицата, с които той е свързан. Тригерите са свързани с конкретна маса. Всички направени промени спусъка данни се третират като една сделка.







За разлика от конвенционалните запомнени процедури / функции, спусък сървъра безусловно изпълнява при определени начални прояви. В допълнение, SQL спусъка още няма аргументи. С помощта на спусъка на следните задачи:

  • валидиране и променливите за валидиране на данни сложни интегрирани данни ограничения, които трябва да се поддържат;
  • натрупване на статистическа информация чрез фиксиране на информацията vnesimyh промени;
  • репликация подкрепа.

С целостта на ограниченията, наложени от правилата и ценностите, не винаги е възможно да се постигне желаното ниво на целостта на данните. Понякога трябва да изпълняват сложни алгоритми за проверка на данни, за да се гарантира тяхната автентичност и реалност. В допълнение, често е необходимо да се следи промените в стойностите на масата на необходимите данни, свързани с климата. SQL тригери могат да се разглеждат като един вид филтър, който влезе в сила след изпълнението на всички операции в съответствие с правилата, приети стойности, и т.н.

SQL Application предизвиква допълнителни разходи, свързани с ресурсите на сървъра за добавяне на работа (спусък вложка), обновяване (спусък обновяване) или изтриване (спусък изтриване) на данните, посочени в таблицата.

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

Връзки страница:

CREATE TRIGGER

CREATE TRIGGER Основният формат на командата е показан по-долу:

Moment старт спусъка се определя дума ПРЕДИ (спусък се задейства преди да бъде изпълнена, свързани случай, например, за да добавите запис) или след (след събитието). Ако спусъка се извиква преди събитието, той може да прави промени в изменяема влизане събитие, ако събитието - не премахването на записи. Някои СУБД налагат ограничения на оператори, които могат да бъдат използвани в спусък (например, може да не се оставя да се направят промени в маса, с която "свързания" спусъка, и т.н.).

Тригери не може да бъде свързан към масата, и видите презентацията. В този случай, с тяхна помощ, механизмът се реализира ", актуализираният представяне." При свързване на спусъка до представителството на ключови думи преди и след засегне само последователността на спусъка на повикване, тъй като самото събитие (изтриване, вмъкване или обновяване) не се развива.

Спусъкът може да се нарече за всеки ред (за всеки ред), обхванати от събитието, или само веднъж за всяко събитие (за всеки ОБЯВЯВАНЕ).

предназначение <список_псевдонимов> Това се отнася до компоненти, такива като възраст, нов или ред (OLD / НЮ) или стари или нови таблица (OLD ТАБЛИЦА / нова маса). Остарели стойности не се прилагат, за да вмъкнете събития и нови - за премахване на събития.

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

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

Синтаксис за създаване на спусъка в MS SQL е както следва:

Наименование на схемата за задействане на ГСД. ГСД задейства действие е ограничено до маса или регион оглед диаграма за която са създадени. schema_name не може да бъде определен за DDL задейства или задейства вход.

Име на спусъка. TRIGGER_NAME аргумент трябва да следва правилата за идентификатори - освен че TRIGGER_NAME не може да започва с # или ##.

Таблицата или изглед към който е прикрепен спусъка.

две маси ще бъдат създадени за изпълнението на спусъка. test_table, test_log. Чрез test_table спусъка маса е свързан. Когато актуализирате записи в таблица test_table спусъка ще запише резултатите в промени на трапезата test_log. Т.е. Trigger ще се нарича с актуализацията на събитието.







Тестов шаблон test_table:

Таблица сеч test_log:

актуализация Trigger:

Проверка на работата на актуализацията на спусъка редове:

Проверете маса сеч test_log на. Резултатът трябва да изглежда така, както е показано на екранната:

XML данни се гледа и да се покаже, че влизате таблица включва стари и нови ценности.

Синтаксис за създаване на спусъка

Аргументът посочва името на генерираните спусъка. Ако е необходимо, може да бъде определен име на схема.

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

PostgreSQL поддържа следните събития [INSERT | DELETE | UPDATE]. При изброяването на няколко събития като разделител, се използва тази OR.

Таблица наименование, което модификация води до задействане на спусъка.

Ключова дума следната структура ЗА ВСЕКИ и определяне на броя на функция изисква при настъпване на определени събития. Използването РЕД означава, че функцията се нарича за всеки запис, за да бъдат променени. Ако функцията трябва да се нарича само веднъж за целия екип, изявлението на ключови думи.

Извършете процедурата function_name

Името на викащата функция аргументи. На практика, аргументите в функцията за повикване спусъка не се използва.

Синтаксисът за определяне на функцията на спусъка

Функциите на спусъка са специални променливи, които съдържат информация за спусъка на разговори. С помощта на функцията за спусък работи с данни. По-долу са някои от най-добрите в спусъка функции променливи.

Индивидуалният рекорд полета на нови и стари от своя страна задейства процедурите, както следва: NEW.names, OLD.rg.

В примера приложи проста система потребителско име. То следи масата за употреба, и всички промени, които се записват в таблицата за сеч. Например, ние ще създадем опростена таблица.

Trigger функция без входни параметри връща специален тип спусъка. Функциите в раздела DECLARE определя третата променлива. Тялото на функцията проверява стойността на променливата TG_OP (вътрешна променлива спусъка). В зависимост от сделката и да определи peremennayu v_user формира retstr стринг, който се записва в дневника за маса.

Променливи нови и стари - това е всъщност една линия, която обработва спусъка. В случая с променлива NEW INSERT ще съдържа нов ред, а старата ще се изпразни. В случай на двете променливи ще актуализира идентифициран (свързани данни), а ако променливата NEW изтриете, не е празен, OLD включва сменяем низ.

Самото задействат описано в PL / pgSQL като:

trg_user спусъка ще се извършва след INSERT транзакция, актуализиране, заличаване за всеки ред и да причини add_to_log функция (). Сега, всички действия, с маса потребители ще бъде записано.

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

Синтаксис CREATE TRIGGER в Oracle е както следва:

По време на създаването на спусъка може да бъде включен допълнителен спусък ограничение чрез определяне булева SQL израз във фразата КОГА. Експресията в КОГАТО фраза се проверява за всеки ред влияе от спусъка. Ако резултатът от изразът е верен, а след това тялото на спусъка се изпълнява. Ако изразът е невярна или NULL, спусък тяло не се изпълнява. Изразът в клаузата за КОГА трябва да бъде израз на SQL, но не и изразяването на PL / SQL, и не може да включва подзаявка.

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

Като пример, помислете за маса с име ново. Следното определение CREATE TRIGGER показва спусъка, свързани с масата ново. която използва опцията за съотнасяне. за да се избегнат конфликти между имената на корелация и името на таблицата:

Новият оператор е преименуван на най-новия използвате опцията за съотнасяне. и след това се използва в тялото на спусъка.

Ако спусъка може да се използва, за да се изпълни повече от един тип оферта ГСД (например, "поставяне или изтриване или актуализиране на"), а след това задейства орган може да използва ПОСТАВЯНЕ оператори. Изтриване и актуализиране. за различни секции на код, в зависимост от условията. Кодът вътре спусъка тяло, можете да използвате следните условия:

Първото условие е изпълнено, когато спусъка започна когато един ред се вмъква в таблицата. Второто условие е изпълнено, когато обновяване на ред в таблицата.

Операторът може допълнително да използва състояние АКТУАЛИЗАЦИЯ проверете името на актуализираната колона. Като пример, помислете следния код, при което тялото ще се изпълнява, ако UPDATE задействане изявление актуализира колона SAL:

В Oracle, можете да забраните временно тригер, ако има някоя от следните условия:

  • обекта, към който се отнася спусъка не е наличен;
  • трябва да извършите масивен товар данни, без да се обадите джапанките;
  • nobhodimosti зареждане на данни в таблица, без да задейства повикване.

спусъка по подразбиране е активирана към момента на нейното създаване. За деактивиране на спусъка, трябва да използвате спусъка командата ALTER с ДЕЗАКТИВ опция. За да се даде възможност на тригер, използвайте командата ALTER TRIGGER с опцията за разрешаване. Възможно е едновременно да забраните всички свързани със задействания на масата, като се използва командата ALTER TABLE с възможност да изключи всички задейства.

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

Следният пример trgDepartmentst_del_cascade спусъка изпълнява каскаден изтриване TRIGGER ИЗТРИЙ каскада записи. Спусъкът е свързан с отдели маса пособията референтна действие DELETE CASCADE deptID първичен ключ на таблицата:

Забележка: обикновено код за изтриване CASCADE се комбинира с кода за зададеният NULL или UPDATE SET DEFAULT, да се помисли как да се актуализира и отстраняване в един спусък.