II.ZH
témaköre:
I.rész
Papíros
feladatok (Semmilyen segédeszköz nem
használható!) (30 perc) A papíros
feladatokra
kapható18 pontból legalább 9 pontot
kell
elérni. 1-3.feladat
(7-6-5 pontos papíros feladatok) - Datalog, E/K
modell->Rel.modell 1.feladat - Tankönyv 5.3-5.4. fejezetei:
- Lekérdezések
kifejezése Datalogban
vagy adott relációs algebrai
kifejezések
átírása Datalogba
vagy nem-rekurzív Datalog
programok
átírása relációs
algebrába. 2.feladat - Tankönyv 10.2. fejezete:
- Adott negációmentes (monoton és
lineáris)
rekurzív
Datalog programok átírása
az SQL-99 szabvány WITH
RECURSIVE
utasítása
segítségével
(papíron). 3.feladat - Tankönyv 4.1-4.6. fejezetei:
- E/K diagram és átírása
relációs
modelbe: egyedhalmazok
és kapcsolatok átírása
relációkká, gyenge egyedhalmazok
kezelése, osztályhierarchia ("isa")
átalakítása
relációkká
(a három
megközelítés közül a
feladatban megadott
szerint).
II.rész
Gépes
feladatok (csak az Oracle on-line dokumentáció
használható!)
(60 perc) A gépes feladatokra kapható
36
pontból legalább 12 pontot kell elérni. 1-6.feladat (5-6-7 pontos gépes feladatok) -Oracle:
teljes SQL és PL/SQL
- SQL DDL (táblák,
megszorítások,
nézetek),
- SQL DML (insert, delete, update),
- SQL SELECT további lehetőségei,
például
CONNECT BY
- PL/SQL hivatkozási és komplex
típusok, (implicit
és explicit) kurzorok,
- PL/SQL tárolt eljárások
és
függvények, kivételkezelés,
- Datalog programmal adott lekérdezések
kifejezése
PL/SQL programmal.
Gépes
mintafeladatsor a II.ZH-hoz: 1.feladatSQL
DDL (táblák,
megszorítások) és DML (insert)
a) Írjon szkript programot, amely új
adattáblát hoz létre az emp és
dept táblákból
myemp és mydept néven. Ha már
léteznek ilyen nevű táblák, akkor előbb
azokat törölje. Véglegesítse az
adattáblákat (commit).
A létrehozott
táblákat lássa el az alábbi
megszorításokkal:
- Legyen az empno elsődleges kulcs a myemp
táblában, és
- legyen a deptno elsődleges kulcs a mydept
táblában és idegen kulcs a myemp
táblában, amely a
hivatkozási épséget biztosítja oly
módon, hogy egy osztály
törlése
esetén törlődjenek ennek az osztálynak a
dolgozói is.
- Egy új dolgozó csak az adott 700
és 7000 USD értéktartománybeli
fizetést
kaphasson.
b) Ellenőrizze ezeket a megszorításokat sikeres
(megfelelő rekord felvitele)
és sikertelen (hibás rekord)
adatbeviteli kísérletekkel, majd
állítsa vissza
az eredeti táblatartalmakat (rollback).
Véglegesítse az adattáblákat (commit).
A további feladatok ezekre a myemp és mydept
táblákra vonatkoznak.
2.feladatSQL DDL
(nézetek) és DML (delete, update)
Lásd az 1.feladatban létrehozott táblákat
(az emp és dept táblákból
készítettünk
saját myemp és mydept táblákat). A
feladatok megoldása során hozzon létre és
használjon megfelelő nézettáblákat,
amelyeket a feladatmegoldás után
töröljön.
a) Írjon szkript programot, amely a myemp
táblából törli a legjobban fizetett
Dallas-i dolgozót.
b) Írjon szkript programot, amely a myemp táblában
megnöveli 'BLAKE' nevű
dolgozó beosztottjainak fizetését az
átlagfizetésük 20%-ával.
A törlés és az adatmódosítás
sikerességéről
listázással győződjön meg, majd
állítsa vissza az eredeti táblatartalmat.
3.feladatSQL
SELECT (hierarchikus
lekérdezések, CONNECT BY)
a) Hierarchikus lekérdezéssel jelenítsük meg
a myemp táblából 'FORD' beosztottjait
b) egy másik lekérdezéssel pedig Ford
közvetlen és közvetett főnökeit, feletteseit.
4.feladatPL/SQL
(kurzorok, függvények)
Írjon PL/SQL függvényt, amely a myemp
tábla alapján kiszámolja a
paraméterként
kapott nevű dolgozónak és a közvetlen
beosztottjainak az átlagfizetését. Ha az adott
dolgozónak nincs beosztottja, akkor értelemszerűen a
dolgozó fizetését adja vissza.
Hívjuk meg a függvényt (egy PL/SQL blokkból
írassuk ki az értékét) 'BLAKE'-re.
5.feladatPL/SQL
(kurzorok, tárolt eljárások,
kivételkezelés)
Írjon PL/SQL tárolt eljárást, amely a myemp
táblában megnöveli minden Dallas-i
telephelyű dolgozók fizetését a saját
fizetésének a 20%-ával, feltéve, hogy
a fizetése
3000 USD alatt van. Ha 3000 USD-nél több lenne, akkor
csak írjon ki egy szöveget.
6.feladatPL/SQL
(rekurzív Datalog átírása PL/SQL-be, az
Eljut
feladat)
Az alábbi Datalog programot írjuk át PL/SQL-be,
használjuk a myemp táblát.
felettese(X, Y)
<- myemp(X, 'FORD', _, Y, _, _, _, _)
felettese(X, Y) <- felettese(X, Z) AND myemp(Z,
_, _,
Y,
_, _, _, _)