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

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

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:

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

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

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

SQL DDL-2 (aktív elemek) triggerek

Tranzakciókezelés PL/SQL-ben

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

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

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

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

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

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

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

Adatbázisok* tulajdonságai

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

Haladó DBMS ismeretek 1

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

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

Adatbázis használat I. 5. gyakorlat

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

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

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

Adatbázis rendszerek SQL nyomkövetés

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

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

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 I. 9. SQL alapok (DDL esettanulmány)

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

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

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

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

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

Bevezetés: az SQL-be

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

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

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

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

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

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

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

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.

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

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

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

LBRA6i integrált rendszer

SQLServer. DB Recovery modes

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

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

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

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

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

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

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

Az SQL adatbázisnyelv: DML

Adatbázis Rendszerek II. 3. SQL alapok

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

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

ADATBÁZIS RENDSZEREK I BEADANDÓ

BEVEZETÉS Az objektum fogalma

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

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

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];

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

Együttes hozzárendelés

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

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

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

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

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

Java és web programozás

Adatbázis tartalmának módosítása

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

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

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. PLSQL alapok 92/1B IT MAN

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

STRUCTURED QUERY LANGUAGE(SQL) - ALAPOK

Az SQL nyelv. SQL (Structured Query Language = Strukturált Lekérdező Nyelv).

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.

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

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

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

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

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

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

Java és web programozás

Adatbázisok I A relációs algebra

Adatbázisban tárolt kollekciók

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

Adatbázisok webalkalmazásokban

Adatbázisok I. Az SQL nyelv

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

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

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Választó lekérdezés létrehozása

Oracle Spatial. Térbeli adatot tartalmazó tábla: Geometry table Legalább 2 oszlopa van: Elsődleges kulcs, SDO_GEOMETRY típusú oszlop.

Átírás:

Adatbázis Rendszerek II. 5. Gy: PLSQL Triggerek B I v: T 2015.03.09 M A N 1/37

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 2/37

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 3/37

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 4/37

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 5/37 fiz > 30

ECA modell Events Események: Műveletsor, melynek bekövetkezését figyeli a rendszer 6/37 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

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 7/37

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 8/37

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( ) 9/37 Művelet után

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 10/37 Munkakör Elnök Titkárnő Rendező Elemző Bér 5000 2850 8000 3000 Naplózó trigger Insert into NAPLO Values(sysdate, user...

Trigger Tökéletesen megvalósítja az ECA elvet: 11/37 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

Trigger Általános formátuma: CREATE TRIGGER triggernév kiváltó_ok akció_blokk; 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) Minden egyes érintett rekord esetén lefut a trigger, a művelet előtt, vagy után 12/37

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 13/37

Trigger Oracle-ben: 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; 14/37

Trigger példa 1. CREATE TRIGGER trg1 AFTER DELETE ON auto BEGIN INSERT INTO naplo VALUES ('törlés', sysdate, user); END; Kiváltó ok (elindulása): DELETE FROM auto WHERE tip LIKE 'opel%'; 15/37

Trigger példa 2. CREATE TRIGGER trg2 AFTER DELETE ON auto FOR EACH ROW BEGIN INSERT INTO naplo VALUES ('törlés', sysdate, user); END; Kiváltó ok (elindulása): DELETE FROM auto WHERE tip LIKE opel%'; 16/37

Trigger (deluxe) CREATE OR REPLACE TRIGGER módosít BEFORE INSERT OR UPDATE OR DELETE ON részvények BEGIN IF (TO_CHAR (sysdate,'dy') IN ('SAT','SUN')) OR (TO_CHAR (sysdate, 'HH24') NOT BETWEEN '08' AND '18') THEN IF DELETING THEN 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; 17/37

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. 18/37 > 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.

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 19/37

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: 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. 20/37

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 szintű triggerné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ó. 21/37

Trigger példa 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; 22/37

Trigger példa Trigger, amely naplózza a változásokat: 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, MC :OLD.beoszt - :NEW.beoszt); END IF; END; 23/37

Triggerek kezelése Engedélyezés, letiltás: ALTER TRIGGER triggernév ENABLE; ALTER TRIGGER triggernév DISABLE; Listázás: Select * from user_triggers; Törlés: DROP TRIGGER triggernév; 24/37

Autós példa 27. Műveleti szintű trigger készítése, mely az autó táblából történt törléseket figyeli és naplózza! create table naplo (esemeny char(30), datum char(20), felhasznalo char(10)); EXECUTE create or replace trigger t1 after delete on auto begin end; 25/37 insert into naplo values('torles', to_char(sysdate, yyyymm-dd hh:mi:ss ), user);

Autós példa 27. (kipróbálás) select * from auto; delete from auto where tipus like skoda% ; select * from auto; select * from naplo; drop trigger t1; 26/37

Autós példa 28. Rekord szintű trigger készítése, mely az autó táblából történt törléseket figyeli és naplózza! create or replace trigger t2 after delete on auto for each row begin end; insert into naplo values('torles', to_char(sysdate, yyyymm-dd hh:mi:ss ), user); 27/37

Autós példa 29. Rekord szintű trigger készítése, mely az autó táblából történt törléseket figyeli és naplózza. Adjuk meg feltételként, hogy a trigger csak a 15 évnél idősebb autók törlése esetén aktiválódjon! create or replace trigger t3 before delete on auto for each row when (old.kor>15) begin insert into naplo values('torles', to_char(sysdate, 'yyyy-mmdd hh:mi:ss'), user); end; 28/37

Autós példa 30. Trigger készítése, mely az autó táblába történő rekordfelvitelt és az ár mező módosítását figyeli. Felvitelkor ne engedjen 500 eft-nál olcsóbb autót felvinni, módosításkor pedig a megengedett árnövekedés max. 10%. create or replace trigger ins before insert or update of ar on auto for each row begin 29/37 if inserting and (:new.ar < 500000) then :new.ar := 500000; end if; if updating and (:new.ar > (:old.ar*1.1) ) then end; :new.ar := (:old.ar*1.1); end if;

Autós példa 30. (kipróbálás) select * from auto; insert into auto values ( hkl876, mazda, fehér, 15, 300000); select * from auto; update auto set ar=800000 where rsz like hkl876% ; select * from auto; drop trigger ins; 30/37

Autós példa 31. Trigger készítése, mely figyeli az autó táblán történt módosításokat és egy archiv nevű táblába elmenti módosításkor a régi és az új értékeket is. Az archiv tábla kód mezőjének automatikus sorszámosztással (sequence) adjunk értéket. create table archiv (kod number(3), datum date, rsz char(6), tipus char(10), szin char(10), kor number(2), ar number(8)); EXECUTE create sequence kod; EXECUTE 31/37

Autós példa 31. (folytatás) create or replace trigger seq before update on auto for each row begin insert into archiv values (kod.nextval, sysdate, :old.rsz, :old.tipus, :old.szin, :old.kor, :old.ar); insert into archiv values (kod.currval, sysdate, :new.rsz, :new.tipus, :new.szin, :new.kor, :new.ar); end; Kód növelése Kód aktuális értéke 32/37

Autós példa 32. Olyan trigger készítése, melynek hatására egy másik trigger működésbe lép. Figyeljük az ember táblán történő törléseket, ha törlünk egy embert törlődjenek a hozzá tartozó autó rekordok. Az autó rekordok törlését naplózzuk. create or replace trigger torl before delete on ember for each row begin delete from auto_uj where tulaj=:old.id; end; create or replace trigger trn after delete on auto_uj for each row begin insert into naplo values('torles', to_char(sysdate, 'yyyy-mm-dd hh:mi:ss'), user); end; 33/37

Órai feladatok 1. Hozza létre a Naplo5 nevű táblát, a következő szerkezettel: 34/37 [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

Ó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. 35/37

Felhasznált irodalom Kovács László: PL/SQL, elektronikus jegyzet Barabás Péter: Adatbázis rendszerek 2., elektronikus jegyzet Jeffery D. Ullman, Jennifer Widom: Adatbázisrendszerek Kende Mária, Nagy István: ORACLE példatár Don Burleson: Oracle Tips (www.dba-oracle.com) 36/37

VÉGE V É G E 37/37