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.
(4-5 pontos feladatok) - Rekurzív lekérdezések
Datalogban és SQL3 szabványban. 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
Datalog programmá,
vagy nem-rekurzív Datalog
programok
átírása relációs
algebrába. 2.feladat -
Tankönyv 6.5., 7.1-7.4., 8.1-8.2. fejezetei:
- Megszorításokkal kapcsolatos
kérdések. Adatok módosítása
nézettáblákon keresztül. 3.feladat -
Tankönyv 9.1-9.4. fejezetei:
- PL/SQL alapok, tárolt eljárások és
függvények, kurzorral történő
módosítások.
Programrészlet értelmezése,
hibák javítása, például 8gyak#3.3.Kurzor
(3a_hibás_mo) 4.feladat -
Tankönyv 10.2. fejezete:
- Rekurzív lekérdezések kifejezése
rekurzív
Datalog programmal, és 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).
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,
_, _, _, _)