Triggerek gyakorlás
1. feladat: Írj triggert, amely CSAK egy személy NEVének MÓDOSÍTásakor fut le, és kiírja a változtatást.
Megoldás: CREATE OR REPLACE TRIGGER feladat1 BEFORE UPDATE OF NEV ON SZEMELY FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE(‚Regi nev: ' || :OLD.NEV); DBMS_OUTPUT.PUT_LINE('Uj nev: ' || :NEW.NEV); END;
2. feladat: Írj triggert, amely egy személy törlése után kiírja, hogy a városa folyómenti-e.
Megoldás: CREATE OR REPLACE TRIGGER feladat2 AFTER DELETE ON SZEMELY FOR EACH ROW DECLARE folyomentie VAROSOK.FOLYOMENTIE%TYPE; BEGIN SELECT FOLYOMENTIE INTO folyomentie FROM VAROSOK WHERE IRSZ = :OLD.IRSZ AND ORSZAG=:OLD.ORSZAG; DBMS_OUTPUT.PUT_LINE('Törölt személy városa folyómenti-e: '||folyomentie); END;
3. feladat: Írj triggert, amely CSAK 6000 és 7000 közötti irányítószámú városok nevének módosításakor kiírja a változásokat.
Megoldás: CREATE OR REPLACE TRIGGER feladat3 BEFORE UPDATE OF NEV ON VAROSOK FOR EACH ROW WHEN (OLD.IRSZ>=6000 AND OLD.IRSZ<=7000) BEGIN DBMS_OUTPUT.PUT_LINE('Regi nev: '||:OLD.NEV); DBMS_OUTPUT.PUT_LINE('Uj nev: '||:NEW.NEV); END;
4. feladat: Írj triggert, amely üdvözli a felhasználót, ha belép az adatbázisba.
Megoldás: CREATE OR REPLACE TRIGGER feladat4 AFTER LOGON ON SCHEMA BEGIN DBMS_OUTPUT.PUT_LINE('Üdvözöljük '||USER); END;
5. feladat: Írj triggert, amely megakadályozza németországi személyek törlését.
Megoldás: set serveroutput on; CREATE OR REPLACE TRIGGER feladat5 BEFORE DELETE ON SZEMELY FOR EACH ROW WHEN (OLD.ORSZAG LIKE '%Német%') BEGIN RAISE_APPLICATION_ERROR(-20012,'Németországi személy törlése nem megengedett.'); END;