Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Triggerek Kalmár György
2
Trigger Eseményvezérelt tárolt program -> adott események hatására hívódik meg. Ezen események lehetnek: DELETE, INSERT, UPDATE CREATE, ALTER, DROP SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN
3
Triggerek felhasználása
INSERT esetén nem bekért oszlopok automatikus feltöltése Integritás biztosítása Naplózás/logolás Tranzakciók helyességének biztosítása Stb.
4
Triggerek létrehozása
CREATE [OR REPLACE ] TRIGGER trigger_név {BEFORE | AFTER | INSTEAD OF } {INSERT [OR] | UPDATE [OR] | DELETE} [OF oszlopnév] ON táblanév [REFERENCING OLD AS régi NEW AS új] [FOR EACH ROW] WHEN (feltétel) DECLARE --PL/SQL program BEGIN EXCEPTION END;
5
Triggerek létrehozása
Az egyes elemekhez a leírás:
6
Példa 1.: Személy nevének módosításakor írjuk ki a régi és az új neveket.
CREATE OR REPLACE TRIGGER nevmodositas BEFORE UPDATE ON SZEMELY FOR EACH ROW --csak ekkor érhetők el a régi és új értékek DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Regi nev: '|| :OLD.NEV); DBMS_OUTPUT.PUT_LINE('Uj nev: '|| :NEW.NEV); END;
7
Példa 2.: Az előző példát kiegészítve, új személy hozzáadásakor is írjuk ki a nevét.
CREATE OR REPLACE TRIGGER nevmodositas BEFORE UPDATE OR INSERT ON SZEMELY FOR EACH ROW DECLARE BEGIN IF UPDATING THEN DBMS_OUTPUT.PUT_LINE('Regi nev: '|| :OLD.NEV); DBMS_OUTPUT.PUT_LINE('Uj nev: '|| :NEW.NEV); END IF; IF INSERTING THEN END; INSERT INTO SZEMELY VALUES('123456AS','Trigger Szeged',TO_DATE(' ','yyyy-MM- DD'),6720,'Magyarország');
8
Példa 3.: Ha olyan személyt szúrunk be, akinek a lakhelye még nem szerepel a Városok táblában, akkor szúrjuk be előbb a megfelelő várost. CREATE OR REPLACE TRIGGER ismeretlen_varos BEFORE UPDATE OR INSERT ON SZEMELY FOR EACH ROW DECLARE varos_cnt PLS_INTEGER:=0; BEGIN SELECT COUNT(*) INTO varos_cnt FROM VAROSOK WHERE IRSZ=:NEW.IRSZ; IF varos_cnt=0 THEN INSERT INTO VAROSOK VALUES(:NEW.IRSZ,:NEW.ORSZAG,'Ismeretlen',0); DBMS_OUTPUT.PUT_LINE('Automatikus beszúrás a város táblába! Városnév ismeretlen.'); END IF; END;
9
Példa 4.: Törölt személy kiírása.
CREATE OR REPLACE TRIGGER torolt_szemely AFTER DELETE ON SZEMELY REFERENCING OLD AS regi NEW AS uj FOR EACH ROW DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Törölt személy: '||:regi.NEV); END; DELETE FROM SZEMELY WHERE NEV LIKE '%Trigger%';
10
Példa 5.: Hiba kiírása, ha nem megfelelő a bevitt adat hosszúsága
CREATE OR REPLACE TRIGGER hibakiiras1 BEFORE INSERT OR UPDATE ON SZEMELY REFERENCING OLD AS regi NEW AS uj FOR EACH ROW WHEN (LENGTH(uj.SZIGSZ)!=8+1) DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('A személyigazoványszám 8 karakterből kell, hogy álljon!'); END; DELETE FROM SZEMELY WHERE NEV LIKE '%Trigger%'; INSERT INTO SZEMELY VALUES('123456A','Trigger Gyor',TO_DATE(' ','yyyy- MM-DD'),5900,'Magyarország');
11
Feladat: Készítsünk egy városok beszúrását naplózni képes táblát:
Beszúrt város neve Beszúrás dátuma Minden város beszúrásánál szúrjunk be egy megfelelő sort a fenti táblába TRIGGER segítségével.
12
Egyéb események Események: LOGON, LOGOFF, BEFORE CREATE, AFTER CREATE,
BEFORE ALTER, AFTER ALTER, BEFORE DROP, AFTER DROP
13
Hiba generálása RAISE_APPLICATION_ERROR(-szám, ‚’Üzenet!’);
Az adott tranzakció leáll és a megadott hiba keletkezik.
14
Belépés/kilépés naplózása
Segédtábla: CREATE TABLE LOGON( NEV VARCHAR(20), DATUM DATE );
15
Naplózó trigger CREATE OR REPLACE TRIGGER On_Logon AFTER LOGON ON h_azonosito.Schema BEGIN INSERT INTO LOGON VALUES (USER || ' belepett', SYSDATE); END; Írdd meg a kilépés naplózásához szükséges triggert is! Teszteld a működést!
16
Példa 6.: Írjuk ki, ha tábla definiciója módosításra került.
CREATE OR REPLACE TRIGGER vedett1 AFTER ALTER ON SCHEMA BEGIN DBMS_OUTPUT.PUT_LINE('Adattábla módosítása történt.'); END; ALTER TABLE SZEMELY MODIFY(NEV VARCHAR2(100));
17
Példa 7.: Akadályozzuk meg tábladefiniciók módosítását.
CREATE OR REPLACE TRIGGER vedett1 BEFORE ALTER ON SCHEMA BEGIN RAISE_APPLICATION_ERROR(-20012,’Tiltott adattáblák módositása’); END; ALTER TABLE SZEMELY MODIFY(NEV VARCHAR2(100));
18
Feladat Akadályozd meg sémák törlését!
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.