1 / 21

Triggerek

Triggerek. Készítette: Sárközi Anikó. Triggerek. Tárolt eljárások amelynek lefutását egy esemény váltja ki, pl. egy új rekord beszúrása… Lehetőségünk van például olyan logikai hibák megakadályozására, amelyeket egy egyszerü CHECK paranccsal nem lehetne megakadályozni.

marva
Download Presentation

Triggerek

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Triggerek Készítette: Sárközi Anikó

  2. Triggerek • Tárolt eljárások amelynek lefutását egy esemény váltja ki, pl. egy új rekord beszúrása… • Lehetőségünk van például olyan logikai hibák megakadályozására, amelyeket egy egyszerü CHECK paranccsal nem lehetne megakadályozni. • Egy le nem írt konvenció szerint úgy illik elnevezni a triggereket, hogy a nevükben látható legyen valamilyen formában a táblázat és a parancsok, amikhez a triggert létrehozták • Példa…

  3. Mi is az a CHECK? • „Korlátozás” • korlátozza azt az értéktartományt amit egy mezőbe lehet írni • Egy mező értékét korlátozhatjuk egy logikai kifejezés értékével, a logikai kifejezésben más mezők értékeit is szerepeltethetjük • WARNING: a Mysql-ben nincs…!!!!!van..de mégsincs…

  4. Példák CHECK használatára CREATE TABLE Persons(Kor int NOT NULL,Nev varchar(255) NOT NULL,CHECK (Kor>200)) Utólagos hozzáadás: ALTER TABLE PersonsADD CHECK (Kor>200)

  5. Triggerek fajtái Események típusa szerint: • DML trigger(Data Manipulation Language), • DDL trigger(Data Definition Language), • Logon trigger.

  6. DML triggerek • Táblákon vagy nézeteken hajtódik végre • Akkor aktiválódik ha valamilyen DML esemény történik • DML Események: INSERT, UPDATE, DELETE • Módok: • BEFORE (INSTEAD OF) • AFTER

  7. Before trigger • Mindhárom esemény esetén (INSERT, UPDATE, DELETE) a parancs előtt hajtódik végre. • Lehetőségünk van, saját hiba generálásával megakadályozni a művelet végrehajtódását

  8. After trigger • A trigger egy INSERT, UPDATE vagy DELETE parancs futtatása után (amikor az adatok már módosultak) hajtódik végre. • Ha a triggerben a tranzakciót visszavonjuk, akkor az adatokat az adatbáziskezelő törli.(rollback) • Ha a triggerben mindent rendben találunk, akkor a módosításokat elfogadjuk

  9. DML Trigger korlátozások • Egy táblához legfeljebb 3 trigger készíthető(INSERT, UPDATE, DELETE), • Parancsonként legfeljebb egy, vagyis egy parancshoz vagy AFTER vagy BEFORE • Egy triggert több parancshoz is köthetünk pl: INSERT-UPDATE parancsoknál történő ellenőrzések megegyeznek

  10. Triggerek szintaxisa T-SQL(Transact-SQL): • Microsoft SQL megvalósítása • Programozási szerkezetekkel egészíti ki a nyelvet • Segítségével olyan sql-t tartalmazó programokat írhatunk,amelyekben a szokványos programozási szerkezetek is megtalálhatók (változók, feltételes szerkezetek, ciklusok, eljárások-függvények) • Pl:Microsoft SQL Server 2000, 2005

  11. T-SQL szintaxis: CREATE TRIGGER <trigger_név> ON <táblázat_neve> { BEFORE | AFTER } <sql_parancs_típus> AS <T-SQL_parancs> <trigger_név> : … <táblázat_neve> : annak a táblázatnak a neve amelyre az adatbanknak alkalmaznia kell a triggert <sql_parancs_típus> : INSERT | UPDATE | DELETE <T-SQL_parancs> : egy parancs vagy blokk amit a trigger a meghívásakor végrehajt

  12. Példa(AFTER) CREATE TRIGGER ins_upd_Beszallito ON Beszallito AFTER INSERT, UPDATE AS BEGIN IF UPDATE(BeszallitoID) BEGIN ROLLBACK TRANSACTION END END

  13. Új, módosított vagy törölt adatok lekérdezése • A triggerekben (triggertől függően) létezik két speciális tábla. • A felépítésük megegyezik az INSERT, UPDATE vagy DELETE parancs cél-táblájának felépítésével. • MS SQL Servernél: • „inserted”:Ebben a táblában csak az új (beillesztett vagy beillesztendő) adatok szerepelnek. • „deleted”:Ebben a táblában csak a régi (törölt vagy törlendő) adatok szerepelnek.

  14. Egy INSERT parancs esetében csak az "inserted" táblázat, míg az UPDATE parancsnál mindkettő létezik. • A DELETE parancsnál már csak a "deleted" táblázat létezik. • Mysql-es pl: NEW.nev,NEW.tel, OLD.nev,OLD.tel,

  15. Triggerek szintaxisa PL/SQL : • Az Oracle által kifejlesztett programozási nyelv • Oracle adatbáziskezelőt használva ezen a nyelven írhatunk triggereket és más tárolt eljárásokat. • A nyelv alapja az Ada programozási nyelv(strukturált, típusos, blokkszerkezetes, imperatív p.ny.) • magában foglalja az SQL nyelvet(SELECT, INSERT, DELETE, UPDATE illetve OPEN, FETCH, CLOSE utasításait )

  16. PL/SQL: CREATE [OR REPLACE] TRIGGER <trigger_name> {BEFORE|AFTER} {INSERT|DELETE|UPDATE} ON <table_name> [REFERENCING [NEW AS <new_row_name>] [[OLD AS <old_row_name>]] [FOR EACH ROW [WHEN (<trigger_condition>)]] <trigger_body> <new_row_name> : a táblázat neve, amelyben az új adatok szerepelnek (default: ":NEW") <old_row_name> : a táblázat neve, amelyben a régi adatok szerepelnek (default: ":OLD") <trigger_condition> : egy feltétel, amely fennállása a trigger meghívásához vezet. Más esetben a trigger nem lesz meghívva. <trigger_body> : egy PL/SQL parancs vagy blokk, amelyben a trigger programkódja van.

  17. REFERENCING: nem kötelező megadni. Ilyen esetben a fent nevezett default értékek lesznek véve. FOR EACH ROW: a PL/SQL előnye T-SQL-el szemben, hogy ennek a paraméternek a megadásával a szerver kényszerítve lesz, hogy a trigger például egy INSERT INTO (SELECT * FROM …); parancs minden sorára egyenként hívja meg. Ha a FOR EACH ROW-t nem írjuk oda, a trigger parancsonként lesz meghívva. A PL/SQL ilyenkor ugyan úgy fog viselkedni, mint a T-SQL.

  18. DLL triggerek • Olyan mint a hagyományos triggerek • Rövid tárolású események amik egy eljárás bekövetkeztére jönnek létre • Ezek az események elsősorban tranzakciós sql parancsokra reagálnak(CREATE, ALTER, DROP) • Bizonyos rendszer tárolású események amik kezelnek DDL szerű műveleteket szintén indíthatnak DDL triggereket. • Csak az őket kiváltó DDL állapot befejezte után futnak le. • A DDL triggereket nem lehet INSTED OF triggerként használni

  19. DDL triggerek • Felhasználás: • Adminisztráció feladatok:auditálás,adatbázis-sémák szabályozása • adatbázis-sémák bizonyos változtatásainak megakadályozása • Azt akarod valamitől, hogy történjen az adatbázisban egy az adatbázis-sémádban bekövetkező változásra adott válaszban. • Változásokat vagy eseményeket akarsz felvenni az adatbázis-sémában.

  20. DDL triggerek • Példa:hogy lehet megakadályozni DDL triggerrel, hogy módosítsák vagy eldobják a táblánk, vagy adatbázisunk? CREATE TRIGGER biztonsági ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT ‘Kapcsold ki a „biztonsági" triggert, hogy tudd eldobni és módosítani a táblát ROLLBACK ;

  21. Köszönöm a figyelmet!

More Related