Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN

Hasonló dokumentumok
B I T M A N B I v: T M A N

A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja:

Triggerek. Olyan névvel ellátott adatbázisobjektumok, amelyek eseményorientált feldolgozást tesznek lehetővé

B I T M A N B I v: T M A N

SQL DDL-2 (aktív elemek) triggerek

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Tranzakciókezelés PL/SQL-ben

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Adatbázis kezelés Delphiben. SQL lekérdezések

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbázis Rendszerek II. 2. Ea: Gyakorló környezet

Adatbázis Rendszerek II. 2. Gyakorló környezet

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

Adatbázis Rendszerek II. 4. Ea: MySQL Tárolt eljárások 110/1 B IT MAN

B I T M A N B I v: T M A N

Adatbázis-kezelés. Harmadik előadás

Haladó DBMS ismeretek 1

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adatbázisok* tulajdonságai

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

Adatbázis Rendszerek I. 9. SQL alapok (DDL esettanulmány)

Adatbázis Rendszerek II. 4. PLSQL Kurzorok, hibakezelés 53/1B IT MAN

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

B IT MAN 65/1. Adatbázis Rendszerek II. Ellenőrző kérdések APLSQL B IT MAN. v:

SQL- Utasítások csoportosítása Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Adatbázis használat I. 5. gyakorlat

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

Jegyz könyv. Adatbázis-rendszerek II. Beadandó feladat. Miskolci Egyetem

SQL DDL-1: táblák és megszorítások

BEVEZETÉS Az objektum fogalma

LBRA6i integrált rendszer

Együttes hozzárendelés

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

Adatbázis rendszerek SQL nyomkövetés

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

A triggerek tárolt eljárások, melyek elsüt események hatására indulnak. Ilyen elsüt esemény lehet egy táblára vonatkozó INSERT parancs DELETE parancs

B I T M A N B I v: T M A N

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Adatbázisok elmélete 9. előadás

Adatbázisok elmélete 9. előadás

Adatbázis-kezelés, információs-rendszerek

Adatbázis Rendszerek II. 7. PLSQL JOB-ok 25/1B IT MAN

Adatbázisok elmélete 10. előadás

Kalmár György Adatbázis alapú rendszerek

PL/SQL (folytatás) Kurzorok, függvények, eljárások

SQLServer. DB Recovery modes

Adatbázis Rendszerek II. 3. PLSQL alapok 92/1B IT MAN

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Adatbázis Rendszerek II. 3. SQL alapok

Debreceni Egyetem Informatikai Kar TANULÓI NYILVÁNTARTÓ SZOFTVER FIREBIRD ADATBÁZIS ALKALMAZÁSÁVAL

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

PL/SQL blokk. [címke] [DECLARE deklarációs utasítás(ok)] BEGIN végrehajtható utasítás(ok) [EXCEPTION kivételkezelő] END [név];

Összefoglaló. <variable_name> [IN OUT IN OUT] <data_type> [:=<default_value>] ... <label_name>: <statements>... GOTO <label_name>;...

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Adatbázisok II. Jánosi-Rancz Katalin Tünde 327A 1-1

Bevezetés: az SQL-be

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

Tábla létrehozása: CREATE TABLE alma( ID INT( 3 ) NOT NULL PRIMARY KEY, Leiras VARCHAR( 100 ) );

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Adatbázisban tárolt kollekciók

Kivételkezelés 2. SQLCODE lehetséges értékei:

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Készítette: Szabóné Nacsa Rozália

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

Java és web programozás

ADATBÁZIS RENDSZEREK I BEADANDÓ

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

SQL parancsok feldolgozása

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján


Java és web programozás

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Adatbázis rendszerek. Molnár Bence. Szerkesztette: Koppányi Zoltán

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Adatbázisok I. Az SQL nyelv

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

B I T M A N B I v: T M A N

Az SQL adatbázisnyelv: DML

Relációsémák létrehozása SQL nyelvben

Adatbázisok webalkalmazásokban

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

Átírás:

Adatbázis Rendszerek II. 6. PLSQL Triggerek 32/1B IT MAN B IT v: 2016.03.04 MAN

Passzív adatbázisok negatívumai Példa: VIR rendszer egyik adatbázis összegyűjti a termelési adatokat, egy másik erre épül adatbázis a jelentésekhez, elemzésekhez összesíti a termelési adatokat Feladat: adatátemelést kell végezni az első adatbázisból a másikba, ha az módosul Passzív rendszer esetén: egy operátor figyeli az operatív DB-t, szükség esetén manuálisan elindítja az átemelést végző programot Megoldás: az operatív adatbázist kezel alkalmazásokba beépítünk olyan modult, amely az operatív adatbázis módosulása után az átemelést végrehajtja 32/2 B IT MAN

Aktív DBMS elemek Triggerek JOB-ok Előnyök: Az adatbázisban, egy példányban tárolható kód Új lehetőségek: Állapot figyelés Események által kiváltott műveletek Időzítés, naplózás 32/3 B IT MAN

Követelmények Az aktív adatbázisnak biztosítania kell, magában kell foglalnia a passzív adatbázisok minden szolgáltatását Ki kell dolgozni egy kezelő felületet, nyelvet, mellyel megadhatók, kezelhetők és monitorozhatók az aktív adatbázis elemek Az adatbázis kezelők belső motorját ki kell bővíteni az aktív elemek hatékony végrehajtását biztosító rutinokkal Az alkalmazás fejlesztő eszközöket is ki kell bővíteni az aktív elemek specifikálására szolgáló elemekkel 32/4 B IT MAN

ECA (Event, Condition, Action) modell E Szabály A Kiváltó esemény C Feltétel Válasz tevékenység Update dolgozó set fiz = 34 Update dolgozó set kat = 2 fiz > 30 32/5 B IT MAN

ECA modell Events Események: Műveletsor, melynek bekövetkezését figyeli a rendszer Adatkezelő utasítások (DML): INSERT, DELETE, UPDATE Adatlekérdező utasítások (DQL): SELECT Időfigyelés: Megadott időpontban aktivizálódik a tevékenység Összetett események: and, or, not Műveletsorok Esemény előtt, után, vagy helyett 32/6 B IT MAN

ECA modell Condition Feltétel: logikai kifejezés, melynek teljesülni kell a választevékenység elindításához: Adatbázis feltétel: where Alkalmazás feltétel: az alkalmazásban tetszőlegesen megfogalmazható feltétel 32/7 B IT MAN

ECA modell Action Akció (választevékenység): adatbázis műveletsor adatbázis-kezelő műveleteket tartalmaz a válasz alkalmazás modul egy alkalmazás modul meghívását jelenti a válasz összetett választevékenységeket is írhatunk 32/8 B IT MAN

Trigger (kioldó, előidéző) E TRIGGER A DML művelet C PL/SQL blokk végrehajtása Feltétel Update dolgozó set fiz = 34 Insert into napló Values( ) Művelet után 32/9 B IT MAN

Trigger Alkalmazás SQL> UPDATE DOLGOZÓ SET bér= 2850 Where Dkód=7698 Dolgozó tábla DKÓD NÉV 7838 Király 7698 Kiss 7369 Kovi 7788 Nagy Munkakör Elnök Titkárnő Rendező Elemző Bér 5000 2850 8000 3000 Naplózó trigger Insert into NAPLO Values(sysdate, user... 32/10 B IT MAN

Trigger Tökéletesen megvalósítja az ECA elvet: Ha egy megadott tevékenység és feltétel bekövetkezik, akkor végrehajtódik a választevékenység. Segítségével az figyelhető, hogy végrehajtásra kerüle valamilyen kijelölt adatkezelő művelet Felhasználás: Származtatott értékek kiszámítására Érvénytelen adatmanipulációk kiszűrésére Működési korlátozások biztosítására Naplózásra Statisztika-gyűjtésre 32/11 B IT MAN

Oracle triggerek A triggert kiváltó esemény helye szerint lehetnek: Alkalmazástriggerek Be-kijelentkezés DDL utasítás (create, alter, drop) DML utasítás (delete, insert, update) Adatbázistriggerek Rendszeresemények (startup, shutdown, servererror ) Oracleben az alap trigger egy egyszerű alkalmazástrigger, mely DML műveletekre aktivizálódik 32/12 B IT MAN

Trigger létrehozása (egyszerű DML trigger!) create or replace trigger triggernév időzítés kiváltó_ok akció_blokk; Időzítés: Befor After Instead of (helyett) Kiváltó okok: DML műveletek Insert Update Delete A fenti három tetszőleges kombinációja Trigger hatásmechanizmusok: Egyszer fut le a trigger egy DML művelet előtt vagy után (alapértelmezés, műveleti trigger) Minden egyes érintett rekord esetén lefut a trigger, a művelet előtt, vagy után (sor szintű trigger) 32/13 B IT MAN

Trigger hatásmechanizmus Részleg tábla Művelet előtti trigger RKód 10 20 30 40 Rnév Tervezés Gyártás Eladás Eladás Hely Mc. Mc. Mc. Eger Sor előtti trigger Sor utáni trigger Sor előtti trigger Sor utáni trigger Sor előtti trigger Sor utáni trigger Sor előtti trigger Sor utáni trigger Művelet utáni trigger 32/14 B IT MAN

Trigger létrehozása create trigger triggernév BEFORE AFTER INSERT OR UPDATE OR DELETE [ of oszlopok ] on táblanév [ FOR EACH ROW ] [ WHEN feltétel ] BEGIN PL/SQL blokk; END; 32/15 B IT MAN

Trigger példa 1. datum naplo nev adat create trigger trg_1 after delete on auto begin insert into naplo values (sysdate, user, 'törlés'); end; Kiváltó ok (elindulása): delete from auto where tip like 'opel%'; 32/16 B IT MAN

Trigger példa 2. datum naplo nev adat create trigger trg_2 after delete on auto for each row begin insert into naplo values (sysdate, user, 'törlés'); end; Kiváltó ok (elindulása): delete from auto where tip like 'opel%'; 32/17 B IT MAN

Trigger (deluxe) create or replace trigger reszveny_figyelo before insert or update or delete on reszvenyek begin if (to_char (sysdate,'dy') in ('sat','sun')) or (to_char (sysdate, 'hh24') not between '08' and '18') then Időpont figyelése if deleting then Művelet figyelése raise_application_error (-20502, 'Csak munkaidőben törölhet a részvények táblából.'); elsif inserting then raise_application_error (-20500, 'Csak munkaidőben vihet fel adatot részvények táblába.'); else raise_application_error (-20504, 'Csak munkaidőben módosíthat a részvények táblában.'); end if; end if; end; 32/18 B IT MAN

Trigger (deluxe) Magyarázatok: TO_CHAR (sysdate,'dy') IN ('SAT','SUN') Ha a dátum napja szombat vagy vasárnap, TO_CHAR (sysdate, 'HH24') NOT BETWEEN '08' AND '18') Ha az időpontban az óra értéke nem esik 8 és 18 közé, Akkor a megkísérelt műveletnek megfelelő hibaüzenetet küld a rendszer. > Delete from részvények delete from részvények * Hiba a(z) 1. sorban: ORA-20502: Csak munkaidőben törölhet a részvények táblából. 32/19 B IT MAN

Trigger (deluxe) Magyarázatok: RAISE_APPLICATION_ERROR(kód, 'üzenet'): eljárás, csak alprogramokból hívható, meghívásakor azonnal befejeződik az alprogram futása és a vezérlés visszatér a hívó programhoz a megfelelő hibakóddal, amelyet kivételként lekezelhetünk. A felhasználó által kiváltott, illetve definiált hibák kódjának intervalluma: -20000.. -20999 32/20 B IT MAN

Módosítás előtti és utáni állapotok (1) Az egyes mezők művelet előtti és utáni állapotát jelölik: Művelet előtt: OLD.mezőnév Művelet után: NEW.mezőnév Használati szabályok: Csak sor (rekord) szintű triggereknél használhatók! INSERT esetén csak NEW, UPDATE esetén OLD és NEW, DELETE esetén csak OLD használható. Módosítani csak a :NEW értékét lehet és csak BEFORE trigger esetén. 32/21 B IT MAN

Módosítás előtti és utáni állapotok (2) CREATE [OR REPLACE] TRIGGER trigger_név Kiváltó_esemény(ek) ON tábla_név [REFERENCING OLD AS régi NEW AS új] FOR EACH ROW [WHEN feltétel] PL/SQL blokk; Csak sor (rekord) szintű triggereknél használható. OLD és NEW az alapértelmezett nevek. REFERENCING csak akkor kell, ha más nevet akarunk. A WHEN részben OLD és NEW, a PL/SQL blokkban :OLD és :NEW használandó. 32/22 B IT MAN

Trigger példa kod dolgozo nev fizetes Trigger, amely figyelmeztet, ha egy dolgozó fizetése csökkent: create trigger fizetes_kontroll after update of fizetes on dolgozo for each row when (old.fizetes > new.fizetes) begin dbms_output.put_line (:old.nev ' fizetése csökkent! ' :old.fizetes ' => ' :new.fizetes); end; 32/23 B IT MAN

Naplózó trigger Trigger, amely naplózza a változásokat: datum naplo nev adat create trigger valtozas_naplozo after update on dolgozo for each row begin if :old.fizetes!= :new.fizetes then insert into naplo values (sysdate, user, 'mf' :old.fizetes '-' :new.fizetes); elseif :old.cim!= :new.cim then insert into naplo values (sysdate, user, 'mc' :old.cim '-' :new.cim); elseif :old.beoszt!= :new.beoszt then insert into naplo values (sysdate, user, 'mb' :old.beoszt '-' :new.beoszt); end if; end; 32/24 B IT MAN

Triggerek kezelése Engedélyezés, letiltás: ALTER TRIGGER triggernév ENABLE; ALTER TRIGGER triggernév DESABLE; Listázás: Select * from user_triggers; Törlés: DROP TRIGGER triggernév; 32/25 B IT MAN

Automatikus kód beállítás triggerrel create sequence seq1; create table T4 (kod int, adat varchar2(40)); create trigger t4t1 before insert on t4 for each row begin :new.kod := seq1.nextval; end; T4 kod adat declare a int; begin insert into t4 (adat) values ('Tulipán') returning kod into a; dbms_output.put_line('a rekord kódja: ' a); end; 32/26 B IT MAN

Hibás adatok törlése create trigger t3t1 after insert on t3 for each row begin if :new.kod > 10 then insert into t3temp values (:new.kod); end if; end; T3 kod adat T3temp kod create or replace trigger t3t2 after insert on t3 declare cursor cur is select * from t3temp; begin for c1 in cur loop delete from t3 where kod=c1.kod; end loop; delete from t3temp; end; 32/27 B IT MAN

Automatikus adatmódosítás create table t5 ( kod int, adat varchar2(6), constraint adat_ell check (adat in ('true', 'false')) ); T5 kod adat insert into t5 values (1, 'igaz'); create or replace trigger t5t1 before insert on t5 for each row begin if lower(:new.adat) in ('y','yes','1','t','true','igen') then :new.adat := 'true'; elsif lower(:new.adat) in ('n','no','0','f','false','nem') then :new.adat := 'false'; else dbms_output.put_line('az adat true vagy false lehet!'); end if; end; 32/28 B IT MAN

Törlés több táblából rsz auto tkod tulaj kod nev Egy tulajnak több autója lehet. Ha töröljük a tulajt, törlődjenek az autói. Ha törlünk egy autót, csak akkor töröljük a tulajt, ha nincs több autója. create or replace trigger torl_tulaj before delete on tulaj for each row begin delete from auto where tkod = :old.kod; end; create or replace trigger torl_auto after delete on auto for each row declare db int; begin select count(*) from auto where tkod = :old.tkod; if db = 0 then delete from tulaj where kod = :old.tkod; end if; end; 32/29 B IT MAN

Órai feladatok 1. Hozza létre a Naplo5 nevű táblát, a következő szerkezettel: [Esemeny varchar(20), Adat varchar(100), Datum timestamp] Készítsen egy triggert (TB), mely naplózza a Vasarlo táblába történt beszúrásokat. Esemény: Beszúrás, Adat: VID+Név+Cím (összefűzve) Szúrjon be 2-3 rekordot a Vasarlo táblába, ellenőrizze a trigger működését, aztán törölje le a triggert. Készítsen egy triggert (TM), mely naplózza a Vasarlo táblában történt módosításokat. Esemény: Módosítás, Adat: A módosított adatok esetén a régi és az új értékek összefűzve, vesszővel és aláhúzás jellel elválasztva. Pl. Kiss Béla_Kiss Géza, Mc. Kő u 11_Mc. Hó u 11 Készítsen egy triggert (TT), mely naplózza a Vasarlo táblában történt törléseket. Esemény: Törlés, Adat: VID+törlést végző user neve 32/30 B IT MAN

Órai feladatok 2. Készítsen egy tárolt eljárást (ModT), mely módosítja egy paraméterként megadott Tkod-ú termék árát egy paraméterként megadott értékre. Készítsen egy triggert (TArFigy), mely az ár módosításkor nem engedi az árat 20%-nál nagyobb mértékben megváltoztatni, ez esetben írja ki: Nem megengedett mértékű módosítás: régi ár-új ár, és nem változtat az eredeti értéken. (visszaírja az eredetit) Próbálja ki a trigger működését, aztán törölje a triggert. 32/31 B IT MAN

VÉGE VÉGE 32/32 B IT MAN