3.5.
Kurzor, explicit kurzor, for update záradék
-- Példák kurzor
használatára: plsql_kurzor.sql (Nikovits
Tibor)
-- PL/SQL Language Reference
11gR2 >> 6.fej.
Static SQL/Cursors
Itt érdemes
átnézni a
PL/SQL Language Reference példáit,
például
6.fejezet Static SQL/Cursors részben "FOR UPDATE"-re
keresve
"Example
6-43"
példa hasonló, mint az alábbi
3a_kurzor.sql
feladat:
- Az Oracle dokumentációban
szereplő példák
kipróbálásához:
>>
Lekérdezésekhez: createHRsyn
>>
Módosításhoz: createHRtables
3a_kurzor.sql
- Kurzor,
kurzorattribútumok (%FOUND,
%NOTFOUND)
- Növeljük meg a hivatalnokok
(CLERK)
fizetését a saját
fizetésük 20%-ával!
(hibas_mo.sql
-> tanulságok leszűrése!)
3b_impl_kurzor.sql
- Implicit kurzor, kurzorhasználat
FOR ciklusban - Hozzuk
létre a dolgozo
táblát
az emp táblából, és
bővítsük
azt egy sorszám
oszloppal. Ezt
töltsük fel 1-től
kiindulva egyesével növekvő
értékkel minden
dolgozó esetén a
dolgozók nevének
ábécé sorrendje szerint.
Gyakorló feladatok
az Oracle
Példatárból --
Ehhez: cr_dept_emp.sql
Lásd Példatár
"10.fejezet. Kivételkezelés, alprogramok,
triggerek"
feladatai
5a_kivetelkez.sql
-
Feladat kivételkezelésre
- Írjunk egy olyan
eljárást,
amely kivételkezelést is tartalmaz és
a jutalmat az
emp
táblából
létrehozott dolgozo tábla jutalék
(comm)
értékéhez adja
hozzá!
A jutalom a
dolgozó fizetésének 10%-a,
feltéve, ha a fizetés 3000
dollár
alatt van,
egyébként csak egy
"Boldog Karácsonyt!" üdvözletet
kap.
3.8. PL/SQL triggerek
-- Ez a rész csak a keddi csoportban van a 10. gyakorlaton.
-- PL/SQL Language Reference 11gR2 >> 9.fej. Triggers
Gyakorló feladatok
az Oracle
Példatárból --
Ehhez: cr_dept_emp.sql
Lásd Példatár
"10.fejezet. Kivételkezelés, alprogramok,
triggerek"
feladatai
6a_trigger.sql
- triggerek
- Hozzunk létre BEFORE triggert, amely
megakadályozza a munkaidőn
kívüli
adatmanipulációkat
az emp táblán! Írassuk ki, milyen
műveleteket
kíséreltek meg
végrehajtani munkaidőn kívül!
6b_triggerek.sql
-
triggerek
- Írjunk triggert (és
ellenőrizzük is a működését),
amely megakadályozza
az elnökre (president)
vonatkozó törlő,
beszúró és
adatmódosító
DML utasítások
működését! (a tesztelő script
programban
a hivatkozási
megszorítás
felfüggesztése illetve a
végén
az újbóli engedélyeztetése) PL/SQL
FELADATOK-2 --
Táblák
és
az eddigi sql feladatok: table_dolgozo.txt
-- Ehhez a táblák
létrehozása: create_dolgozo.txt
-- Az előző heti PL/SQL FELADATOK-1 folytatása
(aki azt még nem fejezte be, előbb
azokat
írja
meg
és utána ezeket).
5.) Írjuk ki a dolgozók nevét
és fizetését!
(több sort
visszaadó
lekérdezés, kurzor
használata)
6.) Írjuk ki a 3. 5. és 8. legnagyobb
fizetésű dolgozó nevét,
fizetését!
(kurzor attribútumok)
7.) Módosítsuk a dolgozók
nevét
írjuk át olyan formára, hogy
a kezdőbetű nagybetű legyen a
többi betű pedig kicsi és
a fizetését is
növeljük meg 2 %-kal.
(mind a 3-féle
kurzorhasználattal nézzük meg a
működését,
implicit kurzorral, explicit kurzorral
és rejtett kurzorral is!)
8.) Írjuk ki azon dolgozók nevét
és fizetését, akik fizetése
nagyobb mint
a felhasználó
által
megadott szám (a sz
9.) Írjuk ki azon dolgozók nevét,
fizetését és
osztálykódját, akik a
felhasználó
által megadott
osztályon dolgoznak! A felhasználó
által
megadott betű
legyen A, R, S (Accounting
...) a 10, 20,
30-as
osztály esetén.
(paraméteres kurzor)
10.) Módosítsuk a fizetéseket egy
kurzorral
végighaladva rajtuk!
Adjunk hozzá
mindenki
fizetéséhez n*10 ezret, ahol n a
nevében
levő magánhangzók
száma (a, e, i, o, u)!
(módosítás kurzorral,
beépített
függvények)
11.) Írjunk meg egy függvényt, ami az azonosító
alapján visszaadja a nevet.
Írjunk meg egy eljárást, ami az
azonosító alapján egy OUT
változóban
visszaadja a nevet. (alprogramok, függvény és procedúra)
12.) Írjunk meg egy függvényt, ami
visszaadja a
paraméterében levő
magánhangzók
számát! Majd
módosítsuk a
fizetéseket ennek a
függvénynek a
segítségével. (UPDATE
utasítással, nem plsql-ben)