Skip navigation

Szintaxis, fordítás, engedélyezés, tiltás

Szintaxis

Az adatmanipulációs triggerek alakja a következő:

CREATE [OR REPLACE] TRIGGER triggernév
{ BEFORE | AFTER | INSTEAD OF }
{ DELETE | INSERT | UPDATE [OF oszloplista] }
[OR { DELETE | INSERT | UPDATE [OF oszloplista] } ]
ON tábla
[ REFERENCING [ OLD AS réginév ] [ NEW AS újnév ] ]
[ FOR EACH ROW ]
[ WHEN (feltétel) ]
PL/SQL blokk;

A fenti szintaxisban a szögletes zárójelbe tett részek nem kötelezően szerepelnek az utasításban, a { x | y } azt jelenti, hogy az x és y egyike választható.

Az egyes kulcsszavak jelentése a következő:

CREATE [OR REPLACE] TRIGGER triggernév: létrehozza a triggert a megadott triggernévvel. Ha az OR REPLACE kulcsszó is szerepel az utasításban, akkor az ugyanilyen névvel rendelkező triggert felülírjuk. Ha nincs még ilyen névvel triggerünk, akkor létrehozzuk a triggert és a REPLACE-nek nincs hatása.

BEFORE, AFTER, INSTEAD OF: azt mondja meg, hogy az aktualizálási művelet előtt (BEFORE), után (AFTER) vagy helyett (INSTEAD OF) fusson le a trigger. A BEFORE és AFTER kulcsszavak csak valódi táblákra használható, az INSTEAD OF kulcsszó csak nézettáblákra használható.

DELETE, INSERT, UPDATE [OF oszloplista]: azt mondja meg, hogy a trigger milyen aktualizálási művelet esetén hajtódjon végre. Nem csak egy műveletet lehet megadni, hanem, akár hármat is, így bármelyik művelet esetén le tud futni. Abban az esetben, ha az UPDATE kulcsszó után megadunk egy oszloplistát, akkor a trigger abban az esetben aktiválódik, ha arra az oszlopra vonatkozik a módosítás, máskülönben nem.

ON tábla: itt kell megadni, hogy mely táblára végzett művelet esetén akitválódjon a trigger. Egy trigger csak egy táblát "tud figyelni"!

REFERENCING [ OLD AS régi név ] [NEW AS új név]: Lehetővé teszi, hogy az tábla aktuális sorának aktualizálás előtti és utáni állapotára külön névvel hivatkozzunk. Ha az OLD a régi állapotra, a NEW az új állapotra utal. Ha nem adunk meg régi és új nevet (ez ugye opcionális), akkor rendre OLD.oszlopnév és NEW.oszlopnév formában hivatkozhatunk a régi és új értékre. Ezek használatára az alábbi szabályok vonatkoznak:

  • Csak sorszintű triggernél használhatóak.
  • Az OLD és NEW az alapértelmezett nevek.
  • A WHEN részben OLD és NEW, a PL/SQL blokkban :OLD és :NEW formában használhatóak.
  • INSERT esetén csak a NEW használhaó. (Hiszen most szúrjuk be a rekordot, nincs régi érték.)
  • UPDATE esetében az OLD és NEW is használható.
  • DELETE esetében csak az OLD használható. (Hiszen most töröltük a rekordot, nincs új érték, csak régi.)
  • A triggerben van arra lehetőség, hogy egy oszlopértéket módosítsunk, de csak a :NEW értékét lehet és csak BEFORE trigger esetén.

FOR EACH ROW: Ha megadjuk ezt a triggerben, akkor a trigger az aktualizálási művelet által érintett minden sorra végrehajtódik. Az ilyen triggert sorszintű triggernek nevezzük.  Ha nem szerepel ez a kulcsszó a triggerben, akkor függetlenül attól, hogy az aktualizálási művelet hány sort érint, a trigger csak egyszer fut le. Ilyenkor utasításszintű triggerről beszélünk.

WHEN feltétel: a trigger csak akkor fut le, ha a megadott feltétel teljesül.

PL/SQL programblokk: egy PL/SQL programblokk, amely a trigger aktiválásakor végrehajtódik.

Fordítás

A CREATE TRIGGER hatására a fordítás megtörténik.

A fordítási hibákat SQLPlus-ban a SHOW ERRORS paranccsal lehet megjeleníteni.

SQLDeveloperben a rendszer megjeleníti.

Engedélyezés és letiltás

Engedélyezés:

ALTER TRIGGER triggernév ENABLE;

Tiltás:

ALTER TRIGGER triggernév DISABLE;