Title: Az Oracle SQL 9.
1Az Oracle SQL 9.
- Triggerek és tárolt eljárások.
- Kliens oldali programok.
2A rádiótelefonokat kérem KIKAPCSOLNI!
3Triggerek
4A trigger
- Speciális programblokk (eljárás)
- Egy táblához vagy nézettáblához kapcsolódik
- Adatbázis-események hatására hajtódik végre
- nem lehet meghívni, mint a normál eljárásokat
- PL/SQL nyelven íródik
- az újabb Oracle-verziók a Java és a C használatát
is támogatják - Az adatbázisban tároljuk
- a C-ben írt eljárások nem az adatbázisban vannak
5A triggereket kiváltó események
- DML-utasítások
- INSERT, UPDATE, DELETE
- DDL-utasítások
- CREATE, ALTER, DROP
- Rendszer-események
- az adatbázis elindítása, leállítása, hibák
- Felhasználói események
- bejelentkezés, kijelentkezés
6A triggerek fo alkalmazási lehetoségei
- Bonyolult, kényszerekben nem leírható
adat-ellenorzések - Származtatott oszlopok értékének kiszámítása
- Naplózás
- Statisztikák gyujtése a táblák elérésérol
- Nézettáblákon keresztül történo adatmódosítások
megvalósítása
7Trigger létrehozása / módosítása
- DML-utasításhoz kapcsolódó triggernél az utasítás
alapformájaCREATE OR REPLACE TRIGGER
triggernévBEFORE AFTER INSTEAD OFINSERT
OR UPDATE OR DELETE ON táblanév
nézetnév FOR EACH ROWDECLARE deklarációkBEG
IN utasításokEND
milyen eseményre induljon
a végrehajtandó tevékenység eloírása
8BEFORE / AFTER / INSTEAD OF
- Megadja, hogy a trigger a kiváltó esemény elott,
után vagy helyette fusson le - BEFORE és AFTER csak táblákra használható
- használatuk csak néhány apróságban különbözik
- INSTEAD OF csak nézettáblákra (view) használható
9old és new
- A mezok módosítás elotti és új értékét is el
lehet érni - INSERT esetén a régi érték (old) NULL
- DELETE esetén az új érték (new) NULL
- BEFORE triggerekben az új érték (new) át is
írható, pl. - IF new.egysegar lt 100 THEN new.egysegar
100 -- túl olcsó lenne!END IF
101. példa triggerre
- CREATE OR REPLACE TRIGGER arvaltozas_kiirasaBEFOR
E DELETE OR INSERT OR UPDATE ON cikk FOR EACH
ROWDECLARE ardiff number BEGIN ardiff
new.egysegar - old.egysegar dbms_output.put(n
ew.cikknev) dbms_output.put(Régi ár '
old.egysegar) dbms_output.put(' Új ár '
new.egysegar) dbms_output.put_line('
Növekedés ' ardiff) END /
minden adatmódosító utasításnál elindul
a CIKK tábla minden megváltozott sorára
kiírja a képernyore a cikk nevét, régi és új
árát és a két ár eltérését
SQLPlusban szükséges a végrehajtatáshoz
11A DBMS_OUTPUT csomag üzeneteinek megjelenítése
- Az üzenetek kliens oldali megjelenítéséhez
SQLPlusban aSET SERVEROUTPUT ON SIZE
1000000utasítást ki kell elotte adni!
122. példa triggerre
- CREATE OR REPLACE TRIGGER eleg_idosBEFORE INSERT
OR UPDATE ON hallgato FOR EACH ROWDECLARE
szul_ev NUMBER(4) folyo_ev NUMBER(4)BEGIN
szul_ev TO_NUMBER( TO_CHAR(new.szul_dat,
YYYY)) folyo_ev TO_NUMBER(
TO_CHAR(SYSDATE, YYYY)) IF szul_ev
new.evfolyam 17 gt folyo_ev THEN
RAISE_APPLICATION_ERROR (-20101, Túl
fiatal ahhoz, hogy new.evfolyam . éves
legyen!) END IFEND /
adatbevitel / módosítás hatására indul el
a HALLGATO tábla minden megváltozott sorára
legkorábban 18 éves korában lehet 1. éves, 19
éves korában 2. éves, stb.
SQLPlusban szükséges a végrehajtatáshoz
13A triggereink adatainak megnézése
- Az alábbi táblában találunk információkat
- USER_TRIGGERS
- ALL_TRIGGERS
- DBA_TRIGGERS
14Trigger törlése
- AlakjaDROP TRIGGER triggernév
- PéldaDROP TRIGGER arvaltozas_kiirasa
15 és hol az ALTER TRIGGER?
- Van ilyen utasítás is
- Nem a trigger tevékenységének megváltoztatására
szolgál - Csak engedélyezni / letiltani / újra fordítani
lehet vele a meglévo triggert
161. feladat
- Trigger készítése, amely a VEVOK tábla módosítása
(UPDATE) esetén egy VEVO_NAPLO nevu táblába
beírja - minden módosított vevo (régi) kódját,
- a módosítás idejét
- és a módosítást végrehajtó felhasználó
login-nevét - Figyelem! A VEVO_NAPLO táblát is létre kell hozni!
17Megoldás - a tábla
- CREATE TABLE vevo_naplo( vevokod VARCHAR2(8),
modositva DATE, kicsoda VARCHAR2(30))
18Megoldás - a trigger
- CREATE OR REPLACE TRIGGER naplozAFTER UPDATE ON
vevok FOR EACH ROWBEGIN INSERT INTO
vevo_naplo (vevokod, modositva,
kicsoda) VALUES (old.vevokod, SYSDATE,
USER)END /
19Tárolt programok
20Tárolt program
- Az adatbázisban tároljuk
- Eljárás, függvény vagy programcsomag lehet
- a csomagok változókat, eljárásokat és
függvényeket tartalmazhatnak - PL/SQL nyelven íródik
- az újabb Oracle-verziók a Java és a C használatát
is támogatják - Nagymennyiségu adat feldolgozására a
leghatékonyabb megoldás
21Tárolt eljárás létrehozása / módosítása
- CREATE OR REPLACE PROCEDURE név
(paraméterlista) IS AS deklarációkBEGIN
utasításokEXCEPTION kivételkezelés END név
22Tárolt függvény létrehozása / módosítása
- CREATE OR REPLACE FUNCTION név
(paraméterlista) RETURN adattípus IS AS
deklarációkBEGIN utasításokEXCEPTION kivé
telkezelés END név
a függvény adattípusa
23Példa tárolt eljárás létrehozására
paraméterek
- CREATE OR REPLACE PROCEDURE ataraz
(cikkcsoport INTEGER, szazalek NUMBER) IS-- A
megadott cikkcsoportba tartozó termékek-- árának
emelése az adott százalékkal.-- (Negatív
százalék esetén árcsökkentést jelent.) szorzo
NUMBERBEGIN IF szazalek lt -100 THEN
RAISE_APPLICATION_ERROR(-20100,
Negatív lenne az ár!) ELSE
szorzo (100 szazalek) / 100 UPDATE
cikk SET egysegar egysegar szorzo
WHERE cikkcsop cikkcsoport COMMIT - END IFEND ataraz
- /
deklaráció
SQLPlusban szükséges a végrehajtatáshoz
24Tárolt eljárás hívása SQLPlus-ból
- Az EXECUTE paranccsal
- PéldaEXECUTE ataraz(1, 10)
25A forráskód tárolása az adatbázisban
- A USER_SOURCE nézettáblában történik
(rekordonként egy sor) - A példaként elkészített tárolt eljárás szövegének
lekérdezéseSELECT text FROM USER_SOURCEWHERE
name ATARAZ AND type PROCEDUREORDER BY
line
fontos a nagybetu!
a sor száma a forráskódban
26Tárolt eljárás / függvény törlése
- AlakjaDROP PROCEDURE FUNCTION név
- PéldaDROP PROCEDURE ataraz
27ALTER PROCEDURE / FUNCTION
- Van ilyen utasítás is
- Nem a kód megváltoztatására szolgál
- Csak újrafordítani lehet vele a meglévo eljárást
/ függvényt
282. feladat
- Tárolt eljárás készítése az alábbiak szerint
- neve torol
- bemeno paraméter egy vevo kódja
- tevékenység a vevo nyomtalan eltüntetése az
adatbázisból - Figyelem! A vevo addig nem törölheto, amíg más
táblák hivatkoznak rá!
292. feladat - megoldás
- CREATE OR REPLACE PROCEDURE torol (vevo
VARCHAR2) ISBEGIN -- a tételek törlése a vevo
megrendeléseibol - DELETE FROM rtetel WHERE rszam IN (SELECT
rszam FROM rendel WHERE vevokod vevo)
-- a vevo megrendeléseinek törlése - DELETE FROM rendel WHERE vevokod vevo
- -- a vevo törlése
- DELETE FROM vevok WHERE vevokod vevo
- COMMIT
- EXCEPTION -- bármiféle hiba esetén
visszagörgetés WHEN OTHERS THEN ROLLBACKEND
torol - /
a hosszát itt nem kell megadni!
30Házi feladat
- Trigger készítése, ami a a VEVOK táblából történo
törlés esetén az 1. feladatnál elkészített
VEVO_NAPLO nevu táblába beírja - minden törölt vevo kódját,
- a törlés idejét
- és a törlést végrehajtó felhasználó login-nevét
csupa kisbetuvel - Tárolt eljárás készítése
- bemeno paramétere egy dátum
- a fenti VEVO_NAPLO táblából törli a megadott
dátumnál régebbi bejegyzéseket
31Kliens oldali Oracle programok
32Az Oracle Client
- Kb. 25 alkalmazás rendszergazdáknak és server
oldali fejlesztoknek - Gyakrabban használt összetevok
- Enterprise Manager Console grafikus felület
adatbázisok felügyeletére és hangolására - SQLPlus Worksheet grafikus felület SQL parancsok
kiadására - SQLPlus karakteres felület SQL parancsok
kiadására
33Az Oracle Developer 1.
- Kb. 15 alkalmazás (alapvetoen kliens oldali)
fejlesztoknek - Gyakrabban használt összetevok
- Form Builder adatbeviteli urlapok (formok)
készítésére (mint az Access urlapok) - Report Builder listák készítésére (mint az
Access jelentések)
34Az Oracle Developer 2.
- Gyakrabban használt összetevok (folytatás)
- Procedure Builder triggerek, tárolt programok és
kliens oldali PL/SQL programok készítésére - Graphics Builder a tárolt adatokból diagramok
készítésére - Query Builder lekérdezések készítésére (mint
Accessben)
35Oracle Designer
- Több, többé-kevésbé független eszköz gyujteménye
- Fo funkciói
- üzleti folyamatok modellezése
- adatbázis tervezése
- alkalmazás-tervezés
- az adatbázist eloállító scriptek generálása
- programok generálása
36TOAD
- A Quest Software nevu független cég terméke
- Kényelmes felület az adatbázis kezeléséhez
- hasonló az SQL Developerhez, de sokoldalúbb
- A próbaverzió letöltheto a http//www.toadsoft.com
/downld.html címrol