Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Triggerek Kalmár György.

Hasonló előadás


Az előadások a következő témára: "Triggerek Kalmár György."— Előadás másolata:

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!


Letölteni ppt "Triggerek Kalmár György."

Hasonló előadás


Google Hirdetések