You are on page 1of 12

ADATBZIS ALAP RENDSZEREK

Oracle Triggerek I.

TRIGGEREK LTALNOS ALAKJA


A trigger egy aktualizlsi mvelet esetn vgrehajtand programrszletet definil. Alakja: CREATE [OR REPLACE] TRIGGER nv { BEFORE | AFTER | INSTEAD OF } { DELETE | INSERT | UPDATE [OF oszlopok] } [ OR { DELETE | INSERT | UPDATE [OF oszlopok] } ] ON tbla [ REFERENCING [OLD AS rgi] [NEW AS j] ] [ FOR EACH ROW ] [WHEN (felttel)] PL/SQL blokk; Jells: a fenti szintaxis lersban { x | y } azt jelenti, hogy x s y egyike vlaszthat; nv: a trigger neve.

TRIGGEREK LTALNOS ALAKJA


BEFORE, AFTER, INSTEAD OF: az aktualizlsi mvelet eltt, utn, vagy helyette lp mkdsbe a trigger. DELETE, INSERT, UPDATE OF: az aktualizlsi mvelet neve.

ON tbla: ezen tbla aktualizlsakor lp mkdsbe a trigger.


REFERENCING: lehetv teszi, hogy a tbla aktulis sornak aktualizls eltti s utni llapotra nvvel hivatkozzunk.

TRIGGEREK HASZNLATA OLD S NEW


A mdosts eltti ( OLD) s utni (NEW) llapot elnevezsre szolgl. Szablyok: Csak sor szint triggernl hasznlhat. OLD s NEW az alaprtelmezett nevek. REFERENCING csak akkor kell, ha ms nevet akarunk. A WHEN rszben OLD s NEW, a PL/SQL blokkban :OLD s :NEW hasznland. Hasznlati szablyok: INSERT esetn csak NEW, UPDATE esetn OLD s NEW, DELETE esetn csak OLD hasznlhat. Mdostani csak :NEW rtkt lehet s csak BEFORE trigger esetn

TRIGGEREK LTALNOS ALAKJA


FOR EACH ROW: ha megadjuk, akkor a trigger a tbla minden egyes sorra lefut, amelyet az aktualizlsi mvelet rint (sor szint trigger). Ha nem adjuk meg, akkor egy aktualizlsi mvelet esetn csak egyszer fut le a trigger (utasts szint trigger). WHEN felttel: a megadott felttel teljeslse esetn hajtdik vgre a trigger. programblokk: egy vagy tbb SQL utastsbl ll, vagy valamely programozsi nyelven rt blokk.

TRIGGEREK HASZNLATA
KORLTOZSOK 1. BEFORE s AFTER triggerek nem hasznlhatk nzettblra. 2. INSTEAD OF trigger csak nzettblra hasznlhat. TRIGGER FORDTSA 1. A CREATE TRIGGER hatsra a fordts megtrtnik. 2. Fordtsi hibk megjelentse SQL*Plus -ban: SHOW ERRORS paranccsal.

ENGEDLYEZS, LETILTS ALTER TRIGGER triggernv ENABLE; ALTER TRIGGER triggernv DISABLE;

PLDK
1/a. plda: utasts szint trigger Egyelem segdtbla: CREATE TABLE szamlalo (ertek NUMBER); INSERT INTO szamlalo VALUES (-1); Tbb j dolgoz felvtelnek esetre kt triggert definilunk. Az els nullzza a szmllt: CREATE TRIGGER dolg_kezdo BEFORE INSERT ON dolgozo BEGIN UPDATE szamlalo SET ertek=0; END; /

PLDK
1/b. plda: sor szint trigger A msodik trigger megszmolja a 100 000 - nl kisebb fizets j dolgozkat: CREATE TRIGGER dolg_szamlal AFTER INSERT ON dolgozo FOR EACH ROW WHEN (NEW.fizetes < 100000) BEGIN UPDATE szamlalo SET ertek=ertek+1; END; /

PLDK
2/a. plda: fizets mdostsa Az albbi trigger figyelmeztet, ha egy dolgoz fizetst cskkentettk: CREATE TRIGGER fizetesNemCsokken AFTER UPDATE OF fizetes ON dolgozo FOR EACH ROW WHEN (OLD.fizetes > NEW.fizetes) BEGIN DBMS_OUTPUT.PUT_LINE (:NEW.nev || ' fizetse cskkent!'); END; /

PLDK
3. plda: naplz trigger Dolgoz(adszm, nv, lakcm, fizets) fizetsNapl(dtum, adoszm, rgifiz, jfiz) CREATE TRIGGER fiz_naplo AFTER UPDATE ON dolgozo FOR EACH ROW BEGIN INSERT INTO fizetesNaplo VALUES (SYSDATE, :OLD.adoszam, :OLD.fizetes, :NEW.fizetes); END; /

FELADATOK
1. Adjunk meg egy triggert, ami az j dolgozk beszrsakor, a rekord mentse eltt kir egy figyelmeztet zenetet a konzolra. Prbljuk ki! 2. Hozzunk ltre logolsra egy j tblt, s rjunk egy AFTER triggert, ami az EMP tbla mdostsa (beszrs, trls, mdosts) esetn elhelyez a logtblban egy bejegyzst az esemnyrl . A tblban troljuk a dtumot, a vgrehajt felhasznlt, s a lerst. Prbljuk ki a triggert!

FELADATOK
3. Adjunk meg egy olyan sorszint BEFORE triggert, ami j dolgoz(k) beszrsakor aktivizldik; ha a beszrand dolgoz osztlykdja 30, a fizetse 40%-t egybl adjuk jutalmul neki! Prbljuk ki. 4. Adjunk meg egy sorszint AFTER triggert, amely egy segdtblban letrolja a vltoztats dtuma mellett, hogy az akciban rintett sorokban milyen jelleg vltozs kvetkezett be (insert / update kezelend ) milyen adat vltozott meg milyen sorszm dolgoznl. Prbljuk ki a triggert.

You might also like