PL/SQL feladatok
       
SEGÉDANYAGOK: ORACLE  PL/SQL:
Oracle® Database 10g (10.2)  Documentation Library
- Oracle PL/SQL User's Guide and Ref.10g      HTML   PDF
- Oracle PL/SQL Packages and Types Ref.10g HTML   PDF
 
További segédanyagok a PL/SQL-hez:
- Nikovits Tibor (ELTE) PL/SQL összefoglaló: NT_Plsql.htm
- Kósa Balázs (ELTE) PL/SQL összefoglaló: KB_Plsql.pdf   
- Ullman/Chang (Standford) Using Oracle PL/SQL
- Ullman/Chang (Standford) Constraints and Triggers
- PL/SQL Technology Center (Oracle 11g PL/SQL)
 
_________________________________________________________
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
 
--  Lásd Feladatok.pdf (8-9.fejezet feladatai)  
-- Ehhez: a táblák létrehozása  cr_dept_emp.sql
   
1.1. Változóhasználat
 
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.
 
 
2.2. Kurzor  - Példák kurzor használatára: plsql_kurzor.sql
 
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.

2e_expl_kurzor.sql - Explicit kurzor
-    2d feladat másik megoldása

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)
   
 Vissza az AB1 gyakorlat oldalára             Vissza a Kezdőlapra