triggers pl sql tutorial with example programs
Научете всичко за тригерите в PL SQL, техните видове, употреба и предимства:
В PL SQL транзакции урок на PL / SQL серия , научихме за изявленията COMMIT, ROLLBACK и SAVEPOINTS.
В тази статия ще разгледаме тригерите в PL SQL и техните предимства, видове и употреба. Ще обсъдим как да създадете, задействате, активирате и деактивирате PL / SQL тригери с помощта на примерни програми.
Нека започнем с дискусията !!
Какво ще научите:
Задействания в PL / SQL
Съхранената програма, която се задейства по подразбиране или от някои събития, се нарича спусък.
Задействането се изпълнява поради следните обстоятелства, изброени по-долу:
- Чрез DDL (Data Definition Language) израз като DROP, ALTER или CREATE.
- Чрез DML (Data Manipulation Language) израз като UPDATE, INSERT или DELETE.
- Чрез действие с база данни като SHUTDOWN, STARTUP, LOGOFF и LOGON.
Задействане може да бъде зададено на схема, изглед или база данни, към която е прикачено събитие.
Предимства на тригерите
Те са изброени по-долу:
- Възможност за налагане на референтна цялост.
- Възможност за наблюдение.
- Възможност за регистриране и съхранение на данни за достъп до таблици.
- Възможност за спиране на транзакции, които не са валидни.
- Възможност за налагане на защитни функции.
- Възможност за генериране на производни стойности на колони по подразбиране.
Използване на задействания
Те са изброени по-долу:
- Предотвратява неправилни транзакции.
- Натрупва информация за използването на таблицата.
- Наблюдавайте критична информация.
Видове задействания в PL / SQL
Тригерите могат да бъдат категоризирани въз основа на параметри. Видовете задействания са изброени по-долу:
# 1) Категоризация на нивото на задействане.
- СТАРТ НА НИВО НА РЕД Той се изпълнява за всеки запис, който е актуализиран от DML оператор.
- STATEMENT Задействане на ниво: Той се изпълнява само веднъж от изявлението за събитие.
# 2) Категоризация на времето за задействане.
- ПРЕДИ спусък: Той се изпълнява преди конкретното събитие, което се е случило.
- СЛЕД спусъка: Той се изпълнява след конкретното събитие, което се е случило.
- ВМЕСТО НА спусъка: Това е специален тип задействане и той се изпълнява за всеки запис, който е актуализиран от DML оператор.
# 3) Категоризация на събитието за задействане.
- DML тригер: Той се изпълнява, ако се извърши DML събитие като UPDATE, INSERT или DELETE.
- DDL тригер: Той се изпълнява, ако се извърши DDL събитие като DROP, ALTER или CREATE.
- Задействане на база данни: Той се изпълнява, ако се е случило събитие на база данни като SHUTDOWN, STARTUP, LOGOFF и LOGON.
Създайте тригери
Синтаксис за създаване на тригер:
CREATE (OR REPLACE ) TRIGGER trigger_n BEFORE DELETE (OF column_n) ON table_n (REFERENCING OLD AS o NEW AS n) (FOR EACH ROW) WHEN (condition) DECLARE <> BEGIN < > EXCEPTION <> END;
Тук,
- СЪЗДАЙТЕ (ИЛИ ЗАМЕНЕТЕ) TRIGGER trigger_n - Това е за създаване, замяна или актуализиране на тригер, който има име като trigger_n.
- СЛЕД - Това е за определяне на времето, когато спусъкът ще бъде задействан. INSTEAD OF е за създаване на тригер, който има изглед.
- ИЗТРИЙ - Това е за изпълнение на DML действия.
- (ОТ колона_n) - Това е за споменаване на името на колоната, което ще бъде променено.
- (ON table_n) - Това е за споменаване на името на таблицата, което е прикрепено към спусъка.
- (СПРАВЯВАЩИ СТАРИ КАТО НОВИ КАТО n) - Това е за препратка към старите и новите стойности от DML израза като UPDATE, INSERT или DELETE.
- (ЗА ВСЕКИ РЕД) - Това определя задействане на ниво ред, т.е. задействането ще се задейства за всеки ред, който е модифициран, в противен случай задействането ще се задейства само веднъж, когато се изпълни операторът SQL, което е известно като задействане на ниво таблица.
- КОГА (състояние) - Това дава условие за редове, за които ще се изпълни задействането. Това е приложимо само за задействания на ниво ред.
Нека отново разгледаме таблица, която е именувана СТУДЕНТ .
Нека сега създадем спусък на ниво ред за таблицата STUDENT, който ще бъде изпълнен от DML оператора като UPDATE, INSERT или DELETE в тази таблица. Спусъкът ще изчисли и ще покаже възрастовата разлика между текущите и предишните стойности.
Прилагане на код за създаване на задействане:
CREATE OR REPLACE TRIGGER age_changes BEFORE DELETE OR INSERT OR UPDATE ON student FOR EACH ROW WHEN (NEW.CODE > 0) DECLARE age_diff number; BEGIN age_diff := :NEW.age - :OLD.age; dbms_output.put_line ('Prevoius age: ' || : OLD.age); dbms_output.put_line ('Current age: ' || : NEW.age); dbms_output.put_line ('Age difference: ' || age_diff); END; /
Изход на горния код:
Горният код има някои важни характеристики. Те са изброени по-долу:
- За задействане на ниво таблица не са налични СТАРИ и НОВИ адреси. Можем да използваме тези референции за задействания на ниво запис.
- Ако искаме да приложим друга заявка в същия тригер, тогава трябва да използваме ключовата дума СЛЕД като тригер, който може да модифицира таблица отново само след като предишните модификации са приложени правилно.
- Обсъденият по-горе спусък се изпълнява преди всяко ИЗТРИВАНЕ, АКТУАЛИЗИРАНЕ или ВЪВЕЖДАНЕ на масата. Можем обаче да проектираме и спусък, който се задейства и при една операция ( например, СЛЕД INSERT, който ще изпълни задействането всеки път, когато запис се вмъкне с помощта на операцията INSERT в таблицата).
Задействане на задействания в PL SQL
За да задействаме горния задействащ механизъм, трябва да направим всяка DML операция като ИЗТРИВАНЕ, ВЪВЕЖДАНЕ или ОБНОВЯВАНЕ на таблицата. Нека отново вмъкнем някои стойности в таблицата на Student с помощта на заявката по-долу:
INSERT INTO STUDENT VALUES (4, 'MARY', 16, 97);
След като операцията INSERT приключи в таблицата на студента, задейства age_changes се изпълнява.
Резултатът от кода на заявката:
Тъй като е създаден нов запис и предишната възраст не е налична, предишната възраст и Възрастова разлика изчислението идва като нула в горния изход.
Сега нека модифицирайте запис с оператор UPDATE с помощта на заявката по-долу:
UPDATE student SET age = age + 1 WHERE code = 7;
След като операцията UPDATE приключи в таблицата на Student, задейства age_changes се изпълнява.
Резултатът от горната заявка:
НОВА И СТАРА клауза
Нова клауза се използва за съхраняване на новата стойност за колоните на таблицата за изпълнение на задействането. Използва се в тригери на ниво запис. Стара клауза се използва за съхраняване на старата стойност за колоните на таблицата за изпълнение на задействането. Използва се и в тригери на ниво запис.
По този начин новата и старата клауза се използват за задържане и препращане към новите и старите стойности в тялото на задействането.
Съставен тригер
Съставният тригер се използва за дефиниране на операциите за всички точки на синхронизиране в тялото на спусъка. Той дава разпоредбата за обединяване на всички действия по различно време в едно тяло на спусъка.
Различните точки за измерване на времето са изброени по-долу:
- СЛЕД ИЗЯВЛЕНИЕ ниво
- ПРЕДИ РЯДОВО ниво
- СЛЕД НИВО НА РЕД
- ПРЕДИ ниво на изявление
Деактивирайте и активирайте задействането
Можем да активираме и деактивираме спусък с помощта на DDL израз ALTER.
Синтаксис:
ALTER TRIGGER trigger_n (ENABLE|DISABLE);
Тук trigger_n е името на задействането, което искаме да активираме или деактивираме.
Сега нека деактивираме спусъка с помощта на заявката по-долу:
ALTER TRIGGER STUDENT_DETAILS DISABLE;
Резултатът от кода на заявката:
Сега нека активираме същия тригер с помощта на заявката по-долу:
ALTER TRIGGER STUDENT_DETAILS ENABLE;
Резултатът от кода на заявката:
Често задавани въпроси и отговори
В # 1) Колко вида задействания съществуват в PL SQL?
Отговор: В PL / SQL има два вида задействания. Те са тригер на ниво ред и тригер на ниво изявление.
В # 2) Кой тип задейства използва старите и новите квалификатори?
mysql срещу oracle срещу sql сървър
Отговор: Старите и новите квалификатори могат да се използват само с тригери на ниво ред. Те не са съвместими с тригери на ниво израз.
В # 3) Каква е разликата между спусъка нов и задействания стар?
Отговор: Нов спусък дава списък с нови версии на обектите на записа. Стар спусък дава списък със стари версии на обектите на записа.
В # 4) Какво представлява задействането на ниво ред в PL SQL?
Отговор: Спусък на ниво ред се задейства за ред само веднъж поради събитие. Например, ако изтриването се счита за задействащо събитие за таблица, изявлението delete засяга два реда, тогава задействането се задейства два пъти.
В # 5) Какво е спусък? Обяснете с пример.
Отговор: Задействането е съхранена процедура, която се задейства по подразбиране, ако възникне инцидент в базата данни. Например, ако ред е вмъкнат в таблица или модифицираме някои стойности в таблицата.
В # 6) Какви са последващите задействания?
Отговор: Последващите задействания се задействат след изпълнението на DML оператор, но преди фиксирането в базата данни. Той също така е в състояние да отмени своето действие.
Заключение
В този урок ние обсъдихме някои основни концепции за тригери в PL SQL, които са от съществено значение за използването им по време на програмиране. Покрихме следните теми, изброени по-долу:
- Задействания.
- Видове задействания.
- Различни операции върху тригери.
<< PREV Tutorial | СЛЕДВАЩ Урок >>