13. fejezet - Triggerek

A trigger olyan tevékenységet definiál, amely automatikusan végbemegy, ha egy tábla vagy nézet módosul vagy ha egyéb felhasználói vagy rendszeresemények következnek be. A trigger adatbázis-objektum. A tevékenység kódját megírhatjuk PL/SQL, Java vagy C nyelven. A triggerek működése a felhasználó számára átlátszó módon történik. Egy trigger működését a következő események válthatják ki:

A triggereket elsősorban az alábbi esetekben használjuk:

A triggereket többféle szempont szerint osztályozhatjuk. Meg kell határozni, hogy egy trigger a bekövetkezett eseményhez viszonyítva mikor (például előtte) és hányszor fusson le, illetve külön kell kezelni bizonyos események triggereit. Vegyük sorra a triggerek típusait:

  • sor szintű és utasítás szintű trigger;

  • BEFORE és AFTER trigger;

  • INSTEAD OF trigger;

  • rendszertriggerek.

Sor szintű trigger

Egy sor szintű trigger mindannyiszor lefut, ahányszor a tábla adatai módosulnak. Például egy DELETE utasítás esetén minden törölt sor újból aktiválja a triggert. Ha egyetlen sor sem módosul, a trigger egyszer sem fut le.

Utasítás szintű trigger

Az utasítás szintű trigger egyszer fut le, függetlenül a kezelt sorok számától. Ez a trigger akkor is lefut, ha egyetlen sort sem kezeltünk.

BEFORE és AFTER triggerek

A BEFORE és AFTER triggerek egyaránt lehetnek sor és utasítás szintűek. Csak táblához kapcsoltan hozhatók létre, nézetre nem, ám egy alaptáblához kapcsolt trigger lefut a nézeten végrehajtott DML utasítás esetén is.

DDL utasításhoz kapcsolt trigger is létrehozható, de csak adatbázison és sémán, táblán nem. A BEFORE trigger azelőtt fut le, mielőtt a hozzákapcsolt utasítás lefutna. Az AFTER trigger a hozzákapcsolt utasítás lefutása után fut le.

Ugyanahhoz a táblához, ugyanazon utasításhoz ugyanazon típusból akárhány trigger megadható.

INSTEAD OF trigger

Ez a triggerfajta a hozzákapcsolt utasítás helyett fut le. Az INSTEAD OF trigger csak sor szintű lehet és csak nézeteken definiálható. Akkor használjuk, ha egy nézetet módosítani akarunk, de azt nem tehetjük meg közvetlenül DML utasítások segítségével.

Rendszertriggerek

A triggerek felhasználhatók arra is, hogy adatbázis-eseményekről információkat adjunk az „előfizetőknek”. Az alkalmazások feliratkozhatnak az adatbázis-események, illetve más alkalmazások üzeneteinek előfizetői listájára, és akkor ezeket automatikusan megkapják. Az adatbázis-események a következők:

  • rendszeresemények:

– adatbázis elindítása és leállítása,

– szerverhiba;

  • felhasználói események:

– bejelentkezés és kijelentkezés,

– DDL utasítás (CREATE, ALTER, DROP) kiadása,

– DML utasítás (INSERT, DELETE, UPDATE) kiadása.

A rendszereseményekhez és a felhasználói be- és kijelentkezéshez, illetve a DDL-utasításokhoz kapcsolt triggerek séma vagy adatbázis szinten hozhatók létre.

A DML utasításokhoz kapcsolt triggerek táblákon és nézeteken definiálhatók.

Az események publikálásához az Oracle Advanced Queuing mechanizmusa használható. A triggerek a DBMS_AQ csomag eszközeire hivatkozhatnak (lásd [18]).