_________________________________________________________ PL/SQL FELADATOK: --
Táblák
és
az eddigi sql feladatok: table_dolgozo.txt
-- Ehhez a táblák
létrehozása: create_dolgozo.txt
1.) Hello World program (alap program, kiírás a
képernyőre)
2.) Írjuk ki KING fizetését
(olvasás
táblából
változóba)
3.) Írjuk ki KING belépési
dátumát és
fizetését különböző
formátumokban 1981.11.17,
1981-november-17,
stb
(dátum
formátumok, több oszlopos
lekérdezés)
4.) Írjuk ki a dolgozók nevét
és fizetését (kurzor
használata)
5.) Írjuk ki a 3. 5. és 8. legnagyobb
fizetésű dolgozó nevét,
fizetését
(kurzor attribútumok)
6.) Tegyük be a dolgozók nevét egy plsql
tömbbe, és írjuk ki az utolsó
előtti sort.
(plsql tömb
használata)
7.) Írjuk ki a dolgozók nevét
és fizetését mind a 3-féle
kurzorhasználattal.
8.) Írjuk ki azon dolgozók nevét
és fizetését, akik fizetése
nagyobb mint
a felhasználó
által
megadott szám.
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 package-beli
függvényt,
ami visszaadja a paraméterében
levő
magánhangzók számát.
Módosítsuk a fizetéseket ennek a
függvénynek
a
segítségével. (UPDATE
utasítással, és nem plsql-ben)
(package)
_________________________________________________________ További
gyakorló feladatok
találhatóak
az Oracle
Példatárban
1a_valtozok.sql
- Változóhasználat
(I. az SQL*Plus felhasználói
változói,
II. az
SQL*Plus környezeti változói,
III. a PL/SQL (belső) változói). Az
adatok képernyőre való
kiíratása (Az
Oracle
beépített csomagjai,
DBMS_OUTPUT csomag PUT_LINE
eljárása). CONCAT fv. vagy || jel.
-- Írjunk egy PL/SQL blokkot
tartalmazó SQL*Plus
szkipt programot, amely
a
felhasználótól bekér egy
egész számot! Ha ez a szám nagyobb
100-nál,
akkor a PL/SQL blokkban,
egyébként pedig a PL/SQL blokkot követő
gazdanyelvi (SQL*Plus)
környezetben írassa ki
1b_select_into.sql
- A SELECT ... INTO
utasítás a
PL/SQL-ben
-- Határozzuk meg egy PL/SQL program
segítségével a
felhasználó által
megadott
telephelyen dolgozók
béröszegét. A telephelynek a
várost
(loc)
adjuk meg (mint
például Boston, Chicaco, Dallas vagy New York).
-- Ennek a feladatnak további
megoldásaira a következő szakaszban
visszatérünk
(lásd 2a_select_into.sql és további
megoldásait is).
1.2.
Vezérlési szerkezetek
-- A programozási nyelvekből ismert egyszerű példák 1c_if_then.sql
- Feltételes
utasítás (két
egész
szám összege páros-e) 1d_loop_ciklus.sql
- LOOP ciklus (a Fibonacci-sorozat elemei) 1e_while_ciklus.sql
- WHILE
ciklus (az Euklideszi
algoritmus) 1f_for_ciklus.sql
- FOR ciklus (páratlan
számok
négyzetösszege)
2.1. Hivatkozási
és összetett
adattípusok - Példák plsql_peldak.sql
2a_select_into.sql
- A SELECT ... INTO
utasítás a
PL/SQL-ben
-- Határozzuk meg egy PL/SQL program
segítségével a
felhasználó által
megadott
telephelyen dolgozók
béröszegét. A telephelynek a
várost
(loc)
adjuk meg (mint
például Boston, Chicaco, Dallas vagy New York).
-- Lásd a korábbi 1b_select_into
feladat
I.megoldását is, csak most
hivatkozási
típus
deklarálásával oldjuk meg a feladatot!
II.megoldás:
Közvetlen
összegzéssel. III.mo:
Tagonkénti összesítéssel
(nézettáblával).
-- Valamint rejtett kurzorral
való másik megoldására még
visszatérünk. 2b_gyujtotabla.sql
- Összetett
típus, rekord,
gyűjtőtábla
- Írjunk PL/SQL programot, amely
meghatározza a 7698
azonosítójú
dolgozó nevét
gyűjtőtábla használatával.
2c_kurzor.sql
- Kurzor,
kurzorattribútumok (%FOUND,
%NOTFOUND, stb)
- 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!)
2d_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.
2f_current_of.sql
-
Explicit
kurzor, FOR UPDATE, CURRENT OF
- 2d, 2e feladat harmadik megoldása
3.1. (Tárolt) eljárások és
függvények. Csomagok
3a_alprogr.sql
- Egyszerű számnövelő
példa pl/sql függvények és
eljárások használatára
3b_csomag.sql
- csomag
- Egyszerű példa egy getemp
eljárást
és avg_salary fv-t tartalmazó csomagra.
3c_csomag.sql - csomag
- Egy másik PL/SQL package példa
3.2. Hiba- és
kivételkezelés
3d_hibakez.sql
- hiba és kivételkezelés
- Példa hiba és
kivételkezelésre
Módosítsuk
úgy a programot, hogy másik
ágra
tereljük a hibakezelést!
3e_kivetelkez.sql -
kivételkezelés
- Í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.
4.1. Triggerek
Triggerek csak a vizsgán lesznek, a gyakorlaton a egyik zh-ban sem lesz
feladat a triggerekre. A gyakorlatban majd az MSc kurzusokon tárgyaljuk.
4a_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!
4b_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)