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

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

Tranzakciókezelés PL/SQL-ben

Adatbázis használat I. 5. gyakorlat

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

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

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

Együttes hozzárendelés

SQL DDL-2 (aktív elemek) triggerek

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

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

Haladó DBMS ismeretek 1

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/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

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

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

PL/SQL feladatok 8. gyakorlat

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

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

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

Lekérdezések az SQL SELECT utasítással

PL/SQL 1. rész. Procedural Language extension to SQL

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

Az SQL*Plus használata

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

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

LBRA6i integrált rendszer

Java és web programozás

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

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 HASZNÁLAT I. 4. gyakorlat

Adatbázisban tárolt kollekciók

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

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

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

Adatbázis használat I. 2. gyakorlat

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

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

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

Adatok szűrése, rendezése

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

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

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

Adatbázisok* tulajdonságai

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ázisok elmélete 9. előadás

Bevezetés: az SQL-be

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

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

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

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Adatbázisok webalkalmazásokban

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

Lekérdezések az SQL SELECT utasítással

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

Adatbázisok elmélete 10. előadá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:

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

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

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

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

2007. február 25. TARTALOM

SELECT DISTINCT deptno FROM emp; (distinct) SELECT STATEMENT HASH UNIQUE TABLE ACCESS FULL EMP

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

Célkitűzések Az Oracle10 g felépítésének, használatának alapszíntű megismerése

Java és web programozás

Adatbázis rendszerek SQL nyomkövetés

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.

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

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

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

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

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

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.

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

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

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

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 II. Jánosi-Rancz Katalin Tünde 327A

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) ABR 2( Adatbázisrendszerek 2) 1. Előadás: Celko Joe tippjei Codd törvényei.

Hozzunk ki többet abból amink van. Fehér Lajos

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

Spatial a gyakorlatban

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

Az SQL adatbázisnyelv: DML

Lekérdezések az SQL SELECT utasítással. Copyright 2004, Oracle. All rights reserved.

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

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

Nézetek és indexek. 8. fejezet Nézettáblák

Adattípusok. Max. 2GByte

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

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

Adattípusok. Max. 2GByte

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

A PL/SQL motor. A PL/SQL nyelvű egységek fordítását és futtatását végző rendszer. az adatbázis-kezelőben fejlesztőeszközben (pl.

Adatbázisok biztonsága

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

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 RENDSZEREK I BEADANDÓ

Átírás:

ORACLE TRIGGEREK A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja: CREATE [OR REPLACE] TRIGGER név { BEFORE AFTER INSTEAD OF } { DELETE INSERT UPDATE [OF oszlopok] } [ OR { DELETE INSERT UPDATE [OF oszlopok] } ] ON tábla [ REFERENCING [OLD AS régi] [NEW AS új] ] [ ] [WHEN (feltétel)] PLSQL blokk; Jelölés: a fenti szintaxis leírásban { x y } azt jelenti, hogy x és y egyike választható. név: a trigger neve. BEFORE, AFTER, INSTEAD OF: az aktualizálási művelet előtt, után, vagy helyette lép működésbe a trigger. DELETE, INSERT, UPDATE OF: az aktualizálási művelet neve. ON tábla: ezen tábla aktualizálásakor lép működésbe a trigger. REFERENCING: lehetővé teszi, hogy a tábla aktuális sorának aktualizálás előtti és utáni állapotára névvel hivatkozzunk. A módosítás előtti (OLD) és utáni (NEW) állapot elnevezésére szolgál. Szabályok: 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 PLSQL blokkban :OLD és :NEW használandó. 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 :NEW értékét lehet és csak BEFORE trigger esetén. : ha megadjuk, akkor a trigger a tábla minden egyes sorára lefut, amelyet az aktualizálási művelet érint (sor szintű trigger). Ha nem adjuk meg, akkor egy aktualizálási művelet esetén csak egyszer fut le a trigger (utasítás szintű trigger). WHEN feltétel: a megadott feltétel teljesülése esetén hajtódik végre a trigger. programblokk: egy vagy több SQL utasításból álló, vagy valamely programozási nyelven írt blokk.

KORLÁTOZÁSOK BEFORE és AFTER triggerek nem használhatók nézettáblára. INSTEAD OF trigger csak nézettáblára használható. TRIGGER FORDÍTÁSA A CREATE TRIGGER hatására a fordítás megtörténik. Fordítási hibák megjelenítése SQL*Plus-ban: SHOW ERRORS paranccsal. ENGEDÉLYEZÉS, LETILTÁS ALTER TRIGGER triggernév ENABLE; ALTER TRIGGER triggernév DISABLE; 1a. példa: utasítás szintű trigger PÉLDÁK ELŐADÁS ANYAGBÓL Egyelemű segédtábla: CREATE TABLE szamlalo (ertek NUMBER); INSERT INTO szamlalo VALUES (-1); Több új dolgozó felvételének esetére két triggert definiálunk. Az első nullázza a számlálót: CREATE TRIGGER dolg_kezdo BEFORE INSERT ON dolgozo UPDATE szamlalo SET ertek=0; 1b. példa: sor szintű trigger A második trigger megszámolja a 100 000-nél kisebb fizetésű új dolgozókat: CREATE TRIGGER dolg_szamlal AFTER INSERT ON dolgozo WHEN (NEW.fizetes < 100000) UPDATE szamlalo SET ertek=ertek+1;

2a. példa: fizetés módosítása Az alábbi trigger figyelmeztet, ha egy dolgozó fizetését csökkentettük: CREATE TRIGGER fizetesnemcsokken AFTER UPDATE OF fizetes ON dolgozo WHEN (OLD.fizetes > NEW.fizetes) DBMS_OUTPUT.PUT_LINE (:NEW.nev ' fizetése csökkent!'); 3. példa: naplózó trigger Dolgozó(adószám, név, lakcím, fizetés) fizetésnapló(dátum, adoszám, régifiz, újfiz) CREATE TRIGGER fiz_naplo AFTER UPDATE ON dolgozo INSERT INTO fizetesnaplo VALUES (SYSDATE, :OLD.adoszam, :OLD.fizetes, :NEW.fizetes);

1. példa (BEFORE TRIGGER) PÉLDÁK GYAKORLATI PÉLDÁK EMPDEPT TÁBLÁKON CREATE OR REPLACE TRIGGER emp_alert_trig BEFORE INSERT ON emp DBMS_OUTPUT.PUT_LINE('New employees are about to be added'); Szúrjunk be egy sort! INSERT INTO emp(empno, ename, deptno) VALUES(8000, 'valaki', 40); 2. példa (AFTER TRIGGER) Hozzuk létre az új táblát, ahol a módosításokat fogjuk letárolni! CREATE TABLE empauditlog ( audit_date DATE, audit_user VARCHAR2(20), audit_desc VARCHAR2(20) ); Hozzuk létre a triggert! CREATE OR REPLACE TRIGGER emp_audit_trig AFTER INSERT OR UPDATE OR DELETE ON emp DECLARE v_action VARCHAR2(20); IF INSERTING THEN v_action := 'Added employee(s)'; ELSIF UPDATING THEN v_action := 'Updated employee(s)'; ELSIF DELETING THEN v_action := 'Deleted employee(s)'; INSERT INTO empauditlog VALUES (SYSDATE, USER, v_action); Hajtsunk végre pár műveletet! Pl.: (9001,'SMITH','ANALYST',7782,SYSDATE,NULL,NULL,10);

(9002,'JONES','CLERK',7782,SYSDATE,NULL,NULL,10); UPDATE emp SET sal = 4000.00, comm = 1200.00 WHERE empno IN (9001, 9002); DELETE FROM emp WHERE empno IN (9001, 9002); Kérjük le az empauditlog tábla tartalmát! SELECT * FROM empauditlog; 3. Példa (Sor szintű BEFORE TRIGGER) CREATE OR REPLACE TRIGGER emp_comm_trig BEFORE INSERT ON emp IF :NEW.deptno = 30 THEN :NEW.comm := :NEW.sal * 0.4; Szúrjunk be új sorokat! (9005,'ROBERS','SALESMAN',7782,SYSDATE,3000.00,NULL,30); (9006,'ALLEN','SALESMAN',7782,SYSDATE,4500.00,NULL,30); Nézzük meg a beszúrt sorok tartalmát! SELECT * FROM emp WHERE empno IN (9005, 9006);

4. Példa (Sor szintű AFTER TRIGGER) Hozzuk létre az empchglog segédtáblát, ahol tároljuk majd a változtatásokat! CREATE TABLE empchglog ( chg_date DATE, chg_desc VARCHAR2(50) ); Hozzuk létre a triggert! CREATE OR REPLACE TRIGGER emp_chg_trig AFTER INSERT OR UPDATE OR DELETE ON emp DECLARE v_empno emp.empno%type; v_action VARCHAR2(7); v_chgdesc VARCHAR2(30); IF INSERTING THEN v_action := 'Added'; v_empno := :NEW.empno; v_chgdesc := ''; ELSIF UPDATING THEN v_action := 'Updated'; v_empno := :NEW.empno; v_chgdesc := ' Updated '; IF NVL(:OLD.ename, '-null-')!= NVL(:NEW.ename, '-null-') THEN v_chgdesc := v_chgdesc 'name'; IF NVL(:OLD.job, '-null-')!= NVL(:NEW.job, '-null-') THEN v_chgdesc := v_chgdesc 'job'; IF NVL(:OLD.sal, -1)!= NVL(:NEW.sal, -1) THEN v_chgdesc := v_chgdesc 'salary'; IF NVL(:OLD.comm, -1)!= NVL(:NEW.comm, -1) THEN v_chgdesc := v_chgdesc 'commission'; IF NVL(:OLD.deptno, -1)!= NVL(:NEW.deptno, -1) THEN v_chgdesc := v_chgdesc 'department'; ELSIF DELETING THEN v_action := 'Deleted'; v_empno := :OLD.empno; v_chgdesc := ''; INSERT INTO empchglog VALUES (SYSDATE, v_action ' employee # ' v_empno v_chgdesc); Hajtsunk végre pár műveletet! Pl.:

(9003,'PETERS','ANALYST',7782,SYSDATE,5000.00,NULL,40); (9004,'AIKENS','ANALYST',7782,SYSDATE,4500.00,NULL,40); UPDATE emp SET comm = sal * 1.1 WHERE empno IN (9003, 9004); Nézzük meg az empchglog tábla tartalmát! SELECT * FROM empchglog;