ADATBÁZISOK-1 GYAKORLAT [prog.inf: IP-08AB1G]
  ELTE, 2016/2017-es tanév II.félévében [2017.febr.]
 
 
 1GY | 2GY | 3GY | 4GY | 5GY | 6GY | 7GY | 8GY | 9GY | 10G | 11G | 12G | 13G | «
   
   Gyakorlat: [A-szakirány/1.] Hétfő 10:15-11:45  Déli ép. 2-124 Microsoft labor
   Előadás:  Kedd 8:30-10:00  |  Kedd 12:15-13:45  Déli ép. 0-821 Bolyai terem
   A gyakorlatok az előadások tananyagához kapcsolódnak [link: AB1EA.html]
   Az előadás és gyakorlat kötelező, katalógus van, 4 hiányzás lehetséges.
   >> Ellenőrzésre jelenléti ív (név-> 4kar-kód) hallgato/[jelszóval] [itt: .pdf]
   
   Követelmények: Gyakorlati jegyet a két zh és az órai +pontok alapján számolom.
   -- Az órai+ pont az előző heti előadás és gyakorlat anyagából kérdés: 6 pont/hét
    (mivel a 13 hétből kiesik a két dolgozat hete, az első hét és május 1, a megmaradt
     9 alkalomból a 6 legjobb pontokat számolom be óra+ pontként: 6 x 6 p = 36 pont,
    és az órai munkából nincs min.követelmény. I.ZH/90 perc: 48p; II.Zh/45 perc: 24p;
    össz.108 pont. Min.követelmény 33% /zh. Az egyik dolgozat pótolható/javítható.
   --  I.zh:  8.gyak. (2017.04.03.) SQL/DML; Lekérdezések (SQL, Rel.algebra, Datalog)
   -- II.zh: 12.gyak. (2017.05.15.) Tervezés; SQL/DDL; SQL/PSM >> Oracle PL/SQL
 
   A gyakorlat célja: az előadáson szereplő alapfogalmak, algoritmusok, és
   az adatbázisok-szemlélet gyakorlatban való elsajátítása. Az a cél, hogy
   a hallgatók minél hatékonyabban tudjanak SQL és PL/SQL feladatokat
   megoldani úgy, hogy értsék is hogyan történik a lekérdezések kiértékelése.
   >> Gyakorló feladatok: OraclePéldatár.pdf, [SQL Tutorial], [PL/SQL Tutorial]
   >> Tananyag [AB1EA.html], +az előadás diasorozata [az AB1ea mappában
   >> Segédletek: hallgato/[jelszóval] [ebben a mappában], [eduPLSQL mappa]
   
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G | « 
   1.GY: 2017.02.13.   --- Előkészítés, SQL egy táblára vonatkozó lekérdezések 
   
   Az 1.előadáshoz kapcsolódó előkészítő gépes Oracle gyakorlat (1.előadás.pdf)
   Témakör: Egyszerű tábla létrehozása CREATE TABLE, és standard típusok,
   egy táblán alapuló lekérdezések, SELECT utasítás SELECT, WHERE záradékai
   > Ismerkedés, motiváció, gyakorlati követelmények, tematika, stb.
   > Oracle adatbázisok elérése, SQL Developer használata
   > SQL DDL: relációséma, adattípusok, megszorítások: create table
   > SQL DML: relációelőfordulás, táblák feltöltése adatsorokkal: insert 
   > Egy táblára vonatkozó lekérdezések az SQL-ben.
      -- Előkészítés az Oracle példákhoz: (Human Resource) - hr_sema.pdf
      -- HR séma a dokumentációban: Sample Schemas - Schema Diagram: HR    
          --- Lekérdezésekhez: createHRsyn (elég a szinonimákat használni)
          --- Módosításhoz: createHRtables (itt saját táblaként hozzuk létre)
    > SELECT utasítás SELECT, FROM, WHERE és ORDER BY záradékai
          >> 1.lecke - vetítés kiterjesztése, kifejezések
          >> 2.lecke - kiválasztás, kiválasztott sorok rendezése
    
-- Az órai feladatokhoz előkészítés: TÁBLÁK LÉTREHOZÁSÁRA scriptek:
        >> szeret
        >> createDolg
   -- A dept, emp és salgrade táblák közvetlen létrehozása: cr_dept_emp.sql 
   -- A dept, emp, salgrade, dummy, customer, ord, item, product, price táblák,
      sales nézettábla létrehozása: cr_dept_stb_sales.sql  
 
   FELADATSOR-1/A (egytáblás lekérdezések, egyszerű SELECT utasítás) 
 1.  Milyen azonosítójú osztályon dolgoznak a dolgozók? (kiterjesztett vetítés)
 2.  Adjuk meg a dolgozók között előforduló foglalkozások neveit (vetítés,
     az eredmény halmaz legyen, vagyis minden foglalkozást csak egyszer írjuk ki!)
 3. Kik azok a dolgozók, akiknek a fizetése > 2800? (kiválasztás, elemi feltétel)
 4. Kik azok a dolgozók, akiknek a fizetése 2000 és 4500 között van?
     (1.mo: kiválasztás, összetett feltétel; 2.mo: where-ben: intervallum)
 5. Kik azok a dolgozók, akik a 10-es vagy a 20-as osztályon dolgoznak?
     (1.mo: kiválasztás, összetett feltétel; 2.mo: where-ben: in értékek)
 6. Adjuk meg azon dolgozókat, akik nevének második betűje 'A' (where: like)
 7. Kik azok a dolgozók, akiknek a jutaléka nagyobb, mint 600?
 8. Kik azok a dolgozók, akiknek a jutaléka kisebb-vagy-egyenlő, mint 600?
 9. Kik azok a dolgozók, akiknek a jutaléka ismeretlen (hiányzó adat, nincs kitöltve)
10. Kik azok a dolgozók, akiknek a jutaléka ismert (vagyis nem NULL)
11. Listázzuk ki a dolgozókat foglalkozásonként, azon belül nevenként rendezve.
12. Listázzuk ki a dolgozókat fizetés szerint csökkenőleg rendezve.
   
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G | «             
   2.GY: 2017.02.20.   --- SQL egy táblára vonatkozó lekérdezések (folyt.)
    
   Az 1.előadás.pdf előadáshoz kapcsolódó gépes Oracle gyakorlat (folyt.)
   Témakör: Az SQL SELECT utasítás SELECT és WHERE záradékaiban szereplő
   attribútumok különböző típusaira kifejezések és a sorfüggvények használata.
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
   >> 3.lecke - sorfüggvények használata a SELECT és WHERE záradékban
  
   FELADATSOR-1/B (egytáblás lekérdezések 1GY FELADATSOR-1/A folytatása) 
 1. Adjuk meg dolgozók nevét és az éves fizetését, akik a 10-es osztályon dolgoznak.
 2. Adjuk meg azon dolgozókat, akik nevében van legalább két 'L' betű.
    (Többféle megoldást is keressünk a lekérdezésre, LIKE, INSTR függvény)
 3. Adjuk meg a dolgozók fizetéseinek négyzetgyökét és 3-mal vett maradékát.
 4. Kik azok a dolgozók, akik '1982.01.01.' után léptek be?
 5. Adjuk meg, hogy hány hete dolgozik a cégnél ADAMS és milyen hónapban
     és milyen nap (hétfő, kedd, stb. magyar/angol) lépett be (dátum formátumok)
 6. Számoljuk ki, egészekre kerekítve, hogy a mai nap hány naposak vagyunk,
     azt is, hogy hány hetesek, továbbá hány hónaposak vagyunk (DUAL tábla)
 7. Adjuk meg a dolgozók éves jövedelmét, ahol a havi jövedelem a fizetés
     és jutalék összege, ahol nincs jutalék megadva,ott a 0 helyettesítő
     értékkel számoljunk (NVL függvény alkalmazása).
   
   > Segédlet: Examples/Példák:  SQL Language Reference >> 5 Functions:
      Sorfüggvények: pl. Karakteres függvények: SUBSTRRPAD, ...,  INSTR, ...
      pl. Dátum függvények: MONTHS_BETWEEN, ..., pl. Konverziós: TO_DATE, ...
      pl. Null érték kezelése, helyettesítő érték megadása: NVL, COALESCE, ...
             Figyelem! COALESCE példában: FROM product_information
             mivel ez a tábla nem az HR, hanem OE sémában szerepel, ezért
             itt ki kell írni a táblatulajdonost: FROM OE.product_information
             (ugyanis csak a HR owner tábláihoz hoztuk létre a szinonimákat).
     
   > Önálló gyakorlás: Oracle Példatár Feladatok.pdf 1.fejezet 1.1.-1.18. feladatok
      Megj.: 1.14.feladatban foglalkozás szerint rendezve (nem csoportosítva)
     
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G | « 
   3.GY: 2017.02.27.   --- Lekérdezések relációs algebrában és SQL-ben    
   
   I.rész: 2.előadás.pdf előadáshoz kapcsolódó gyakorlat.
   Témakör: Táblák létrehozása, kulcs- és hivatkozási épség megszorítások,
   több táblára vonatkozó lekérdezések, összekapcsolások, halmazműveletek
   
   FELADATSOR-2/A (többtáblás lekérdezések, összekapcsolások)
 1. Kik azok a dolgozók, akiknek nincs főnöke?
 2. Kik azok a dolgozók, akiknek a főnöke KING?
 3. Kik azok a dolgozók, akik főnökének a főnöke KING?
 4. Adjuk meg azokat a dolgozókat, akik többet keresnek a főnöküknél.
 5. Adjuk meg azoknak a főnököknek a nevét, akiknek a foglalkozása nem 'MANAGER'.
 6. Kik azok a dolgozók, akik osztályának telephelye DALLAS vagy CHICAGO?
 7. Kik azok a dolgozók, akik osztályának telephelye nem DALLAS és nem CHICAGO?
 8. Adjuk meg azoknak a nevét, akiknek fizetése > 200 vagy CHICAGO-i osztályon dolgoznak.
 9. Melyik osztálynak nincs dolgozója?
-- folyt.köv. 5.GY. (SELECT utasítás több táblás lekérdezések, alkérdések)
     
   II.rész: Feladatok relációs algebrai lekérdezésekre (alapműveletekkel);
   Relációs algebrai kifejezések, kifejezőfák átírása SQL lekérdezésekre.
   
    FELADATSOR-3/A: (Szeret tábla és feladatok -- Ehhez: create_szeret)
 1. Kik szeretik az almát?
 2. Kik nem szeretik az almát? (de valami mást igen)
 3. Kik szeretik vagy az almát vagy a körtét?
 4. Kik szeretik az almát is és a körtét is?
 5. Kik azok, akik szeretik az almát, de nem szeretik a körtét?
 6. Kik szeretik vagy az almát vagy a körtét, de csak az egyiket?
--
 7. Kik szeretnek legalább kétféle gyümölcsöt?
 8. Kik szeretnek legalább háromféle gyümölcsöt?
 9. Kik szeretnek legfeljebb kétféle gyümölcsöt?
10. Kik szeretnek pontosan kétféle gyümölcsöt?  
-- folyt.köv. 4.GY. (lekérdezések rel.algebrában és SQL SELECT-tel)
       
   > 3.ELŐADÁS példája: Tk.2.4.14.Feladatok (Tk.54-57.o. 2.4.1.feladat)
   > Tankönyv feladataihoz a scriptek: create Termékekcreate Csatahajók  
   > Termékek feladatai Termékek-feladatok.pdf --> megoldásokat, lásd 3.EA-t
      Lekérdezések kifejezése először (papíron) természetes módon táblákkal,
      a táblákon értelmezett műveletekkel gondolkodva, és relációs algebrában  
      kifejezőfákkal is felrajzolva, majd átírva SQL SELECT utasítással (gépnél)
      többféle átírást, megoldási lehetőséget vizsgáljunk meg, vessünk össze!
   > Önálló gyakorlás: Tk.2.4. Relációs algebrában: Csatahajók-feladatok.pdf
   
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G | « 
   4.GY: 2017.03.06.   --- (folyt) Rel.algebrai kifejezések, és új: teljes SELECT 
 
   I.rész: folyt.3.GY. Relációs algebra alapműveletei. Lekérdezések relációs algebrai 
   kifejezésekkel és kifejezőfákkal, majd átírása SQL lekérdezésekre 
   Gépes előkészítés: Több táblás lekérdezések SELECT utasítás FROM záradéka
   és 3.EA alkérdések a WHERE feltételben alapján a Dolgozo és Osztaly táblák
   természetes összekapcsolását nézzük meg több, különböző lehetséges módon
  (WHERE-ben kapcsoló feltétellel, IN alkérdéssel, ill. EXISTS korrelált alkérdéssel)
     
    FELADATSOR-3/B (Lekérdezések kifejezése relációs algebrai kifejezésekkel)
-- 3.EA: "Melyik a leggyorsabb PC?" - típusú feladata: Legyen adva EVETT(NEV, KG)
    sémájú reláció és azt tartalmazza, hogy ki mennyi gyümölcsöt evett összesen.
11. Ki ette a legtöbb gyümölcsöt? ("Melyik a leggyorsabb PC?" rel.alg.kifejezésfával)
--  folyt.táblás/gépes (Szeret tábla és feladatok -- Ehhez: create_szeret)
12. Kik szeretnek minden gyümölcsöt?
    (Kik szeretik az összes olyan gyümölcsöt, amit valaki szeret?)
13. Kik azok, akik legalább azokat a gyümölcsöket szeretik, mint Micimackó?
14. Kik azok, akik legfeljebb azokat a gyümölcsöket szeretik, mint Micimackó?
15. Kik azok, akik pontosan azokat a gyümölcsöket szeretik, mint Micimackó?
 
   II.rész: Az SQL SELECT utasítás GROUP BY, HAVING és ORDER BY záradékai
   Gépes gyak: Oracle gyakorlat, az SQL SELECT utasítás GROUP BY, HAVING
   és ORDER BY záradékai, csoportosítás és összesítő függvények használata
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
   >> 1/4.lecke - csoportosítás, group by és having záradékok
   
  FELADATSOR-1/C (egytáblás lekérdezések 2GY FELADATSOR-1/B folytatása) 
 1. Mennyi a minimális, illetve a maximális fizetés a dolgozók között?
 2. Mennyi a dolgozók összfizetése?
 3. Adjuk meg, hogy hány különböző foglalkozás fordul elo a dolgozók között!
 4. Mennyi a 20-as osztályon az átlagfizetés?
 5. Adjuk meg osztályonként az átlagfizetést!
 6. Adjuk meg azokra az osztályokra az átlagfizetést, ahol ez nagyobb mint 2000.
 7. Melyek azok az osztályok, ahol legalább hárman dolgoznak és mennyi az itt
     dolgozók fizetéseinek az összege?
 8. Adjuk meg osztályonként a minimális fizetést, de csak azokat az osztályokét, ahol
     a minimális fizetés nagyobb, mint a 30-as osztályon dolgozók minimális fizetése.
 9. Adjuk meg osztályonként az ott dolgozó hivatalnokok (FOGLALKOZAS='CLERK')
     átlagfizetését, de csak azokon az osztályokon, ahol legalább két hivatalnok dolgozik!
10. Adjuk meg a legmagasabb osztályonkénti átlagfizetést!
        
   > Önálló gyakorlás: Oracle Példatár Feladatok.pdf 2.fejezet 2.1-2.24 feladatok
   
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G | « 
   5.GY: 2017.03.13.   --- A kiterjesztett relációs algebra, SELECT kiértékelése
   
   Rel.algebra kiterjesztése, csoportosítás, rendezés, összekapcsolások   
   Gépes gyak: Oracle gyakorlat, az SQL SELECT utasítás GROUP BY, HAVING,
      Több táblára vonatkozó lekérdések, többféle megoldás joinnal, alkérdéssel
      Összekapcsolások és alkérdések használatával többféle módon oldjuk meg,
      de az alkérdéseket most még csak a WHERE és HAVING záradékokban
      használjunk és kerüljük a FROM utáni alkérdéseket (ún. inline nézeteket),
      a köv.héten nézzük meg a nézettáblák és az inline nézetek használatát!  
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
      >> 1/5.lecke (összekapcsolások többféle szintaxisa, a külső join is) 
      >> 1/7.lecke (halmazműveletek halmazokon illetve multihalmazokon)
   
 FELADATSOR-2/B (folyt. több táblás lekérdezések, öszekapcsolások, alkérdések)
 1. Adjuk meg osztályonként a telephelyet és az átlagfizetést.
 2. Kik azok és milyen munkakörben dolgoznak a legnagyobb fizetésű dolgozók?
 3. Adjuk meg, hogy mely dolgozók fizetése jobb, mint a saját osztályán (vagyis
     azon az osztályon, ahol dolgozik az ott) dolgozók átlagfizetése!
 4. Adjuk meg, hogy mely dolgozók átlagjövedelme jobb, mint a saját osztályán
    dolgozók átlagjövedelme, ahol a jövedelem a fizetés és jutalék összege, ahol
    nincs jutalék megadva, ott a 0 helyettesítő értékkel számoljunk (NVL függvény).
 5. Adjuk meg, hogy az egyes osztályokon hány ember dolgozik (azt is, ahol 0=senki).
 6. Adjuk meg osztályonként a dolgozók összfizetését az osztály nevét megjelenítve
    ONEV, SUM(FIZETES) formában, és azok az osztályok is jelenjenek meg ahol
    nem dolgozik senki, ott az összfizetés 0 legyen. Valamint ha van olyan dolgozó,
    akinek nincs megadva, hogy mely osztályon dolgozik, azokat a dolgozókat
    egy 'FIKTIV' nevű osztályon gyűjtsük össze. Minden osztályt a nevével plusz
    ezt a 'FIKTIV' osztályt is jelenítsük meg az itt dolgozók összfizetésével együtt. 
   
   > Önálló gyakorlás: Oracle Példatár Feladatok.pdf 3.fejezet feladatai
 
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G | «
   6.GY: 2017.03.20.  --- Alkérdések a SELECT  utasítás záradékaiban, nézetek
  
 I.rész:  Több táblára vonatkozó lekérdések, alkérdések használata.   
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
      >> 1/6.lecke és  2/6.lecke (alkérdések) -- és hasonló feladatok alkérdésekre
   
  FELADATSOR-2/C (folyt. több táblás lekérdezések, öszekapcsolások, alkérdések)
   >> TÁBLÁK LÉTREHOZÁSÁRA a szkript: createDolg.txt  --- Forrás: cr_dept_emp.sql 
 1. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek van 1-es fizetési kategóriájú dolgozója.
 2. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek nincs 1-es fizetési kategóriájú dolgozója.
 3. Adjuk meg azon osztályok nevét és telephelyét, amelyeknek két 1-es kategóriájú dolgozója van.
 4. Adjuk meg azokat a foglalkozásokat, amelyek csak egyetlen osztályon fordulnak elő,
  és adjuk meg hozzájuk azt az osztályt is, ahol van ilyen foglalkozású dolgozó.
 5. Adjuk meg azon dolgozók nevét, fizetését, jutalékát, adósávját és fizetendő adóját, akik
  nevében van S-betű. Adósávok 1000 alatt 0%, 1000 és 2000 között 20%, 2000 és 3000 között
  30%, 3000 fölött 35%. Az adót a teljes jvedelemre (sal+comm) a megadott kulccsal kell fizetni.
 6. Adjuk meg osztályonként a legnagyobb fizetésu dolgozó(ka)t, és a fizetést.
 7. Adjuk meg azokat a fizetési kategóriákat, amelyekbe beleesik legalább 3 olyan dolgozónak
  a fizetése, akinek nincs beosztottja.
 8. Adjuk meg a legrosszabbul kereső főnök fizetését, és fizetési kategóriáját. 
 9. Adjuk meg, hogy (kerekítve) hány hónapja dolgoznak a cégnél azok a dolgozók, akiknek a DALLAS-i telephelyű osztályon a legnagyobb a fizetésük.
10. Adjuk meg azokat a foglalkozásokat, amelyek csak egyetlen osztályon fordulnak elő,
  és adjuk meg hozzájuk azt az osztályt is, ahol van ilyen foglalkozású dolgozó.
11. Adjuk meg azoknak a dolgozóknak a nevét és fizetését, akik fizetése a 10-es és 20-as osztályok
  átlagfizetése közé esik. (Nem tudjuk, hogy melyik átlag a nagyobb!)
   
   > Önálló gyakorlásra: Oracle Példatár Feladatok.pdf 3.fejezet feladatai, ahol
      hierarchikus lekérdezésekre is vannak feladatok, ehhez szükséges ismeretek:
   
-- -- --
II.rész:  WITH utasítás, de előtte még egy példa nézettáblák használatára:
   -- Képezzük osztályonként az összfizetést, vegyük ezen számok átlagát, és
   -- adjuk meg, hogy mely osztályokon nagyobb ennél az átlagnál az összfizetés.
 
   CREATE OR REPLACE VIEW osztaly_osszfiz
   AS
   SELECT onev, SUM(fizetes) ossz_fiz
   FROM sila.dolgozo d, sila.osztaly o
   WHERE d.oazon = o.oazon
   GROUP BY onev;
 
   CREATE OR REPLACE VIEW atlag_koltseg
   AS
   SELECT SUM(ossz_fiz)/COUNT(*) atlag
   FROM osztaly_osszfiz;
   
   SELECT * FROM osztaly_osszfiz
   WHERE ossz_fiz  >  (SELECT atlag FROM atlag_koltseg)
   
-- Ugyanez WITH-záradékkal, lásd 2/6.lecke (16-18.o. WITH záradék)
 
   WITH
   osztaly_osszfiz AS (
       SELECT onev, SUM(fizetes) ossz_fiz
       FROM sila.dolgozo d, sila.osztaly o
       WHERE d.oazon = o.oazon
       GROUP BY onev),
   atlag_koltseg AS (
       SELECT SUM(ossz_fiz)/COUNT(*) atlag
       FROM osztaly_osszfiz)
  SELECT * FROM osztaly_osszfiz
  WHERE ossz_fiz  >  (SELECT atlag FROM atlag_koltseg)
    
-- -- --
III.rész: WITH RECURSIVE utasítás. Tk.10.2. Rekurzió. Az Eljut feladat.pdf
   > (papíron) Tk.10.2. Az Eljut-feladat. Rekurzió az SQL-ben: WITH RECURSIVE
   > További példák Datalog szabályok WITH RECURSIVE utasításra való átírására.
   > További példák az Oracle SQL Lang.Ref.11.2.pdf dokumentációban:
      >> Rekurzió with-utasítással: itt 19-36 Subquery Factoring: Example
      >> Eljut feladathoz a táblák létrehozása: create_jaratok_tabla.txt
    
  Oracle Példák Hierarchikus lekérdezésekre (ezt kibővítjük majd gráfokra is)
       >> 2/7.lecke Hierarchikus lekérdezések -- hiera_lekerd.txt
             További példák az Oracle SQL Lang.Ref.11.2.pdf dokumentációban:
          -- Hierarchikus lekérdezések: Chapter 9 - SQL Queries and Subqueries
              innen Hierarchical Queries 9-3 és Hierarchical Query Examples  9-5
 
-- -- --
  > Önálló gyakorlásra: Oracle Példatár Feladatok.pdf 3.fejezet feladatai.
        
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G |« 
   7.GY: 2017.03.27.  --- Logika a lekérdezésekhez, Datalog átírása. SQL DML
    
 Emlékeztető:  
   --  I.zh:  8.gyak. (2017.04.03.) SQL/DML; Lekérdezések (SQL, Rel.algebra, Datalog)
   -- II.zh: 12.gyak. (2017.05.15.) Tervezés; SQL/DDL; SQL/PSM >> Oracle PL/SQL
   Az I.ZH előtti összefoglalás, konzultáció, kérdés/válasz 
   > 1-6.előadások anyaga: Tankönyv 2.4.,5.1-5.4., 6.1-6.5., 10.2. fejezetek
   > 1-7.gyakorlatok anyaga: Oracle Példatár 1-3., és 5-6. fejezet feladatai
   
-- -- --
I.rész: Lekérdezésekre 6.előadás.pdf (Datalog) előadáshoz kapcsolódó feladatok:
   > (papíron) Tk.5.4. Relációs algebrai kifejezések átírása Datalog szabályokra
   > Lekérdezések kifejezése Datalog szabályokkal, a korábbi feladatokat most
      közvetlenül logikával írjuk fel, majd a Datalog szabályokat írjuk át az SQL-be.
    FELADATSOR-3/A: (Szeret tábla és feladatok -- Ehhez: create_szeret)
 1. Kik szeretik az almát?
 2. Kik nem szeretik az almát? (de valami mást igen)
 3. Kik szeretik vagy az almát vagy a körtét?
 4. Kik szeretik az almát is és a körtét is?
 5. Kik azok, akik szeretik az almát, de nem szeretik a körtét?
 stb. 12. Kik szeretnek minden gyümölcsöt?
   
-- -- --
II.rész: SQL DML (insert, delete, update)
   > Oracle Példák: -- DML-utasításokhoz saját táblák létrehozása: createHRtables 
      >> 1/8.lecke  SQL DML-utasítások (insert, update, delete) és a tranzakciók
   > Feladatok: Adatok karbantartása adattáblán illetve nézeten keresztül,
      és megfigyelni ezek egymásra hatását: Hogyan hat a nézetek adatainak
      módosítása az adattáblára, és a másik irányban, az adatok módosítása
      hogyan jelenik meg a nézetben? Eközben mentési pontokat adjunk meg
      ahova folyton visszagörgetjük. Tranzakciókezelés alapjai, mentési pontok:
      SAVEPOINT és a visszagörgetés: ROLLBACK (illetve érvényesítés: COMMIT).
   
  FELADATSOR-4/A (DML utasítások: DELETE, INSERT és UPDATE)
     Előkészítés: Ezekhez a DML feladatokhoz ámenetileg most megszorítások
     (mint például hivatkozási épség) megadása nélkül hozzuk létre a táblákat:
   >> Módosított Dolgozo és Osztaly táblák létrehozása (no constraints)
   >> Órai gyakorló feladatok .txt-ben is itt: DML_feladatok.txt
 
DELETE
  1. Töröljük azokat a dolgozókat, akiknek jutaléka NULL.
  2. Töröljük azokat a dolgozókat, akiknek a belépési dátuma 1982 előtti.
  3. Töröljük azokat a dolgozókat, akik osztályának telephelye DALLAS.
  4. Töröljük azokat a dolgozókat, akiknek a fizetése kisebb, mint az átlagfizetés.
  5. Töröljük ki azokat az osztályokat, akiknek van olyan dolgozója,  aki a 2-es
      fizetési kategóriába esik (lásd FizFokozat táblát, adjuk meg azon osztályok
      nevét, amelyeknek van olyan dolgozója,  aki a 2-es fizetési kategóriába esik)
  6. Töröljük ki azon osztályokat, amelyeknek 2 olyan dolgozója van, aki a 2-es
      fizetési kategóriába esik.

INSERT
  7. Vigyünk fel egy 'Kovacs' nevű új dolgozót a 10-es osztályra a következő
      értékekkel: dkod=1, dnev='Kovacs', oazon=10, belépés=aktuális dátum,
      fizetés=a 10-es osztály átlagfizetése. A többi oszop legyen NULL.
  8. Több sor felvitele: Hozzunk létre egy UjOsztaly nevű táblát, amelynek
      attribútumai megegyeznek az Osztály tábla oszlopaival, plusz van még egy
      numerikus típusú Letszam nevű attribútuma. Ebbe az UjOsztaly táblába az
      insert utasítás 2. alakjával (alkérdéssel ) vigyünk fel új sorokat az osztály és
      dolgozó táblák aktuális tartalmának felhasználásával minden osztály adatát
      kiegészítve az adott osztályon dolgozók létszámával. Azok az osztályok is
      jelenjenek meg ahol nem dolgozik senki, ott a létszám 0 legyen. Továbbá
      ha vannak olyan dolgozók, akiknek nincs (nem ismert) az osztályuk, azok
      létszámát egy oazon=0, onev= 'FIKTIV' és telephely='ISMERETLEN'
      adatokkal rendelkező sorba írjuk be.
   
UPDATE
  9. Növeljük meg a 20-as osztályon a dolgozók fizetését 20%-kal.
10. Növeljük meg azok fizetését 500-zal, akik jutaléka NULL vagy
      a fizetésük kisebb az átlagnál.
11. Növeljük meg mindenkinek a jutalékát a jelenlegi maximális jutalékkal. 
12. Módosítsuk 'Loser'-re a legrosszabbul kereső dolgozó nevét.
13. Növeljük meg azoknak a dolgozóknak a jutalékát 3000-rel, akiknek
      legalább 2 közvetlen beosztottjuk van.
      Az ismeretlen (NULL) jutalékot vegyük úgy, mintha 0 lenne.
14. Növeljük meg azoknak a dolgozóknak a fizetését, akiknek van olyan
      beosztottja, aki minimális fizetéssel rendelkezik.
15. Növeljük meg a nem főnökök fizetését a saját osztályuk átlagfizetésével.
     
-- -- --
III.rész: SQL DDL. Megszorítások
   > Oracle PéldákSQL DDL (create table) Táblák és megszorítások létrehozása
       >> 1/9.lecke  SQL DDL (táblák és megszorítások létrehozása)
       >> 2/1.lecke  SQL DDL (innen: csak a megszorítások létrehozása kell)
   > További segédletek: create table, típusok, megszorítások (.txt)
   > Feladatok: Táblák és megszorítások (constraints) létrehozása.
    
   FELADATSOR-4/B
1.) Í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.
2.) 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).
3.) Egyszerű és összetett nézettáblák létrehozása, melyik módosítható és melyik nem?
4.) Adatok karbantartása adattáblán illetve nézeten keresztül, és megfigyelni ezek
     egymásra hatását: Hogyan hat a nézetek adatainak módosítása az adattáblára,
     és a másik irányban, az adatok módosítása hogyan jelenik meg a nézetben?
5.) 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).
   
--  -- --
   > Önálló gyakorlásra: Oracle Példatár Feladatok.pdf 5-6.fejezet feladatai
    
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G | «              
   8.GY: 2017.04.03.  --- I.ZH SQL SELECT, SQL DML, SQL DDL utasításai  

   > I.ZH témaköre:  
  -- -- --
   > 40-45 perc (24 pont) papíron: 1-6.előadások anyagából
       Ullman-Widom Tankönyv: 2.4. Alap relációs algebra;

       5.1-5.2. Kiterjesztett relációs algebra; 5.3-5.4 Datalog;
       6.1-6.5. SQL SELECT utasítás; SQL DML; 10.2 Rekurzió.
  -- -- --
   > 40-45 perc (24 pont) gépes Oracle: 1-7.gyakorlatok anyaga
       Egy és több táblára vonatkozó lekérdezések SQL SELECT-tel 

       >> Oracle Példatár 1-3., és 5-6. fejezeteinek feladatai
  -- -- --
 > A ZH papíros részénél nem használható semmilyen segédlet, segédeszköz,
    24 pont: hat darab 4 pontos kérdés/típusfeladat, hasonló, mint vizsgalapok
 
> A gépes feladatokhoz használható Oracle doku [medusa] és sqldeveloper
    24 pont: hat darab 4 pontos feladat, a zh feladatokat/megoldással, lásd lent
 
> Az aramis (vagy ha nem működik, akkor az ullman) adatbázisok elérhetősége: 
        HOST: aramis.inf.elte.hu   PORT: 1521   SEVICE: eszakigrid97
        HOST: ullman.inf.elte.hu   PORT: 1521   SEVICE: ullman
 - A gépes feladatok megoldását és outputját (ha túl hosszú, akkor csak az elejét)
   másolja be egy .txt  szövegfájlba, a neve vezeteknev_neptun.txt (ékezet nélkül)
   egyszerű .txt szövegfájl legyen!
 - Ha az SQL Developerben nem az (1) Execute Statement, hanem (2) Run Scriptként
   futtassa a lekérdezésekezet, akkor az outputot a Script Outputból Ctrl-C Ctrl-V-vel
   be tudja másolni a beküldendő szövegfájlba. A szövegfájl első sora egy megjegyzés
   legyen, amely tartalmazza a hallgató teljes nevét, neptun kódját.
 - Kérem, hogy ebben a beküldendő szövegfájlban a feladatlapon megadott kérdések
   sorrendjét kövesse, és megjegyzésekkel világosan különítse el, hogy melyik rész
   melyik feladathoz tartozik. Adja meg az egyes lépéseket is, amelyek elvezették a
   megoldáshoz, vagyis közbülső lépéseket is másolja át a beadandó szövegfájlba,
   legyen világosan tagolva az egyes feladatnál mi a munkamenet, mi a megoldás!
 - Beküldése: vezeteknev_neptun.txt szövegfájlt áthúzni ide: \\nas2.inf.elte.hu\zh\sila
 
> A táblák létrehozása és feltöltése (itt most egy kicsit más) adatokkal: create_table_zh
   a feladatok megoldását az adatoktól függetlenül a táblák sémái alapján kell megadni: 
   OSZTALY(OAZON,ONEV,TELEPHELY)
   DOLGOZO(DKOD,DNEV,FOGLALKOZAS,FONOKE,BELEPES,FIZETES,JUTALEK,OAZON)
 
> Feladatok: Az SQL-ben SELECT utasítással fejezzük ki az alábbi lekérdezéseket:
  a) Kik azok a dolgozók, akik főnökének a főnöke KING?
  b) Adjuk meg azoknak a főnököknek a nevét, akiknek nincs 2000-nél nagyobb
      fizetésű beosztottja.
  c) Adjuk meg, hogy az egyes osztályokon mennyi a fizetések összege, akikről
      nem tudjuk, hogy melyik osztályon dolgoznak, azokat ’Ismeretlen’ osztálynév
      alatt összesítsük, és csak azokat az osztályokat jelenítsük meg, ahol
      legalább két fő dolgozik.
  d) Adjuk meg, hogy az egyes telephelyeken hány ember dolgozik, de csak azokat
      a telephelyeket adjuk meg, ahol a minimális fizetés nagyobb 1000-nél vagy ahol
      nem dolgozik senki (ekkor 0-t írjunk ki)!
  e) Törölje a legjobban fizetett Dallas-i dolgozót (vagy dolgozókat, ha többen is
      vannak max-fizetésen)!
  f) Módosítsa a dolgozó táblát, azon dolgozóknak, akinek legalább 2 beosztottja van,
     emelje meg 1000-el a jutalékát (ahol nem volt megadva jutalék, azt állítsa 1000-re).
 
  -- -- --
Megjegyzések: A gépes zh feladatok megoldását megjegyzésekkel, lásd itt: [.txt]
 > Ellenőrzésre a zh eredmények, részpontok jelszóval és név-nélküli kóddal
    a jelenléti ív (név-> 4kar-kód) hallgato/[jelszóval] [itt: .pdf] második lapján
   
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G |«   
   9.GY: 2017.04.10.  --- PL/SQL progr. alapok, az Eljut feladat PL/SQL-ben
   
   > Oracle PL/SQL: Oracle Junior EA >>> Oracle PL/SQL.pdf -->> 1-16.o.
   > SQL/PSM --- Ullman-Widom Tankönyv 9.3-9.4.fejezetei alapján
      -- Tk.9.3. SQL/PSM: Osztott változók, lekérdezések és kurzorok
      -- Tk.9.4. Tárolt eljárások és függvények, kivételkezelés  
   > Oracle PL/SQL segédanyagok: ebben az eduPLSQL mappában  
      -- Tankönyvtár: PL/SQL programozás Oracle 10g-ben (Gábor A.-Juhász I.)
   > Oracle PL/SQL doksi: Oracle 11gR2 doc PL/SQL Language Reference
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
   
  -- -- --  --
    1/7.rész: PL/SQL alapjai, PL/SQL blokk szerkezete >> 2.fej. Alapok
      [1_deklarációs_rész] 2_végrehajtható_rész [3_kivételkezelő_rész]
      SET SERVEROUTPUT ON;
      >> példa-2-24 deklarációk-és-értékadás
      >> példa-2-25 select-into (itt a 2-25 példában blokk: begin ... end; /
            át kell tenni az end;-et a végére!) SELECT INTO-t akkor használjuk,
            ha a lekérdezés pontosan egy sort ad, ha a lekérdezés több sorral
            tér vissza, akkor  kurzort kell használni, lásd köv.gyakorlat anyagát).
      >> példa6-1 DML utasítások a programban, implicit kurzor
      >> példa-6-4 implicit kurzor attribútumok
   
   > FELADATSOR 5/A --- PL/SQL--1 feladatok:
     -- A feladatokat most is a saját Dolgozo-Osztaly táblákra kell megírni, ehhez
         a táblákat létrehozó script, mint a DML-hez volt: createDolg (no constraint)
     -- A PL/SQL blokk előtt minden alkalommal állítsuk be: SET SERVEROUTPUT ON
     1.) Az első feladat: Írjuk ki PL/SQL blokkból: 'Szia Világ!', majd egészítsük ki,
          kérjen be egy nevet, számot, dátumot és ezeket is írassuk ki a programból!
     2.) Írjuk ki KING fizetését (olvasás táblából változóba), abban az esetben,
          ha ismert, hogy pontosan egy KING nevű dolgozó szerepel a táblában,
          lásd példa-2-25 select-into (csak ha a lekérdezés pontosan egy sort ad).
     3.) Adjuk meg egy főnök azonosítóját, és töröljük a közvetlen beosztottjait, és
          írassuk ki hány beosztottja volt, lásd  példa-6-4 implicit kurzor attribútumok. 
     
  -- -- --  --
      2/7.rész:  Vezérlési szerkezetek a PL/SQL-ben 4.fej. Control Statements
      PL/SQL alapjaihoz kiegészítés: Alprogramok (tárolt eljárások/függvények)
      >> példa2-19 Alprogramok (már itt is vannak: 2.fej. Alapok)
      >> példa4-1 Alprogramok IF-THEN utasítás példában (4.fej. Utasítások)
      Vezérlési szerkezetek: Feltételes utasítások, ciklusok
      >> példa-4-5 if-then-elsif utasítás,
      >> példa-4-6 egyszerű case utasítás, és itt írjuk át grade := 'B' -> '&B'
            helyettesítési változóra, aminek a felhasználó adja meg az értékét!
      >> példa-4-10 alap LOOP ciklus utasítás EXIT WHEN kilépés a ciklusból
      >> példa 4-14 FOR ciklus utasítás
      >> példa 4-27 WHILE ciklus utasítás
  -- -- --  --    
      >> Oracle PL/SQL.pdf (és összefoglalók) plsql_01_bevezetes.pdf,
           02_vezerlo_utasitasok.txt02_tipusok.pdf03_dml.pdf05_valtozok.pdf
      --- Ez volt az előkészítés az Eljut feladat megoldásához, lásd köv.3/6.részt.
    
  -- -- --  --
      3/7.rész:  Az "Eljut feladat" megvalósítása PL/SQL-ben
      >> Motiváció: Tk.10.2. Az Eljut-feladat SQL/PSM-ben (PL/SQL-ben)
      >> Az ehhez szükséges előkészületeket lásd PL/SQL 1/7 és 2/7 részben és
           >> példa6-1 DML utasítások a programban, implicit kurzor
   
    -- Az Eljut-feladat a Tankönyv (Ullman-Widom kék könyv) 10.2 szakaszára épül
    -- Adott Jaratok(legitarsasag, honnan, hova, koltseg, indulas, erkezes) táblában
        repülőjáratok adatait tároljuk (honnan-hova várospárok). Azt keressük, hogy
        Dallasból mely városokba tudunk eljutni (közvetlenül vagy egy/több átszállással). 
    -- Ezzel a scripttel jaratok_tabla.txt készítsünk saját táblát, ami alapján dolgozunk.
   
   > Rek1.feladat: Mely (x, y) várospárokra lehetséges egy vagy több átszállással
      eljutni x városból y városba? -- Ehhez készítsünk egy Eljut(honnan, hova) táblát, 
      a sorait a járatok tábla alapján PL/SQL programmal töltsük fel (ciklust szervezni, 
      az insert 2.alakja: több sor felvitele alkérdéssel/járatok és eljut táblák alapján).
      >>> (csak ha kell, egy kis segítség, további ötletek és a megoldás vázlata: itt)

   > Rek2.feladat: Mely (x,y) város párokra hány átszállással és milyen költségekkel
      lehetséges egy vagy több átszállással eljutni x városból y városba? -- Ehhez is
      készítsünk Eljut2(honnan, hova, atszallas, koltseg) táblát, a sorait programmal.
    >> Papíron megoldandó feladat: Fejezzük ki az SQL-1999-es szabvány SELECT
         WITH RECURSIVE utasítással, hogy mely mely városokba (hova) tudunk eljutni
         'DAL' (Dallas)-ból legfeljebb 3 átszállással és legfeljebb 5000 költségből.
          >>> (csak ha kell, egy kis segítség WITH RECURSIVE papíros részéhez itt)
      
   > Rek3.feladat: Tegyük fel, hogy nemcsak az érdekel, hogy el tudunk-e jutni az
      egyik városból a másikba, hanem az is, hogy utazásunk során az átszállások is
      ésszerűek legyenek, ez azt jelenti, hogy ha több járattal utazunk, akkor nézni
      kell átszálláskor az érkező járatnak legalább egy órával a rákövetkező indulás
      előtt meg kell érkeznie. (Tegyük fel, hogy nincs egy napnál hosszabb utazás!)
     
   > Rek4.feladat: A fenti feladatokat oldjuk meg PL/SQL-ben úgy is, hogy ne csak
      a várospárokat, hanem a teljes útvonalat is listázzuk ki.
     
 -- -- --
 Ţovábbi gyakorló feladatok az Oracle Példatárból
   > Önálló gyakorlás: Oracle Példatár Feladatok.pdf 8.fejezet 8.1-8.9.feladatok
  -- 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).  
  --  Vezérlési szerkezetekre feladatok:
  -- 1c_if_then.sql - Feltételes utasítás (és a MOD)
  -- Kérjünk be két egész számot és döntsük el, hogy az összegük páros-e vagy
      páratlan. Az eredményt a PL/SQL blokkban írjuk ki futás közben.  
  -- 1d_loop_ciklus.sql - LOOP ciklus 
  -- Állítsuk elő a felhasználó által megadott darabszámig a Fibonacci-sorozat
     elemeit. (A megoldáshoz LOOP ciklust használjunk.)
  -- 1e_while_ciklus.sql - WHILE ciklus 
  --  Kérjünk be két (nem túl nagy) egész számot és írjuk ki a legnagyobb közös
     osztókat (az Euklideszi algoritmussal és a WHILE ciklust használjunk).
  -- 1f_for_ciklus.sql - FOR ciklus 
  -- Írjunk SQL*Plus szkript programot, amely egy PL/SQL blokkban kiszámítja
     a felhasználó által megadott A számtól a felhasználó által megadott B számig
     a páratlan számok négyzetösszegét, és ezt az SQL*Plus környezetben írjuk ki.
     (A megoldáshoz FOR ciklust használjunk.)

   -- -- -- TAVASZI SZÜNET: 2017.04.12 (szerdától) - 04.18 (keddig)  -- -- -- 
          
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G |«   
   10.GY: 2017.04.24.  --- PL/SQL: Lekérdezések programból, kurzorok
 
   > Oracle PL/SQL: Oracle Junior EA >>> Oracle PL/SQL.pdf -->> 17-21.o.
   > SQL/PSM --- Ullman-Widom Tankönyv 9.3-9.4.fejezetei alapján
      -- Tk.9.3. SQL/PSM: Osztott változók, lekérdezések és kurzorok
      -- Tk.9.4. Tárolt eljárások és függvények, kivételkezelés  
   > Oracle PL/SQL segédanyagok: ebben az eduPLSQL mappában  
      -- Tankönyvtár: PL/SQL programozás Oracle 10g-ben (Gábor A.-Juhász I.)
   > Oracle PL/SQL doksi: Oracle 11gR2 doc PL/SQL Language Reference
   > Oracle PL/SQL, ehhez Oracle 11gR2 doc PL/SQL Language Reference
   -- Az Oracle doksikban szereplő DML példák kipróbálásához: createHRtables
   
  -- -- --  --
      4/7.rész:  Kurzorok deklarálása és használata >> 6.fej. Static SQL/Cursors
      >> példa-6-7 explicit kurzorok deklarálása és használata, lásd 5.feladat,
      >> példa-6-11-től 6-14 explicit kurzor attribútumok, lásd 6.feladat,
      >> példa-6-17 paraméteres kurzorok, lásd 7-8.feladat, 
      >> példa-6-43 for update kurzor módosításhoz, lásd 9-10.feladat.
      >> (összefoglaló) (volt:03_sql_dml.pdf), 13_kurzorok.pdf, pl03_cursor.txt 
       
   > FELADATSOR 5/B --- PL/SQL--2 feladatok:
     -- A feladatokat most is a saját Dolgozo-Osztaly táblákra kell megírni, ehhez
         a táblákat létrehozó script, mint a DML-hez volt: createDolg (no constraint)
     -- A PL/SQL blokk előtt minden alkalommal állítsuk be: SET SERVEROUTPUT ON
     1-3.) Folytatás, lásd az előző heti gyakorlaton az első PL/SQL feladatokat! 
     4.) Lásd az Eljut-feladat megvalósítását PL/SQL programmal: Rek1, Rek2.
     5.) Írjuk ki a dolgozók nevét és fizetését!
          -- több sort visszaadó lekérdezés, kurzor használata, lásd  példa-6-7 
     6.) Írjuk ki a 3. 5. és 8. legnagyobb fizetésű dolgozó nevét, fizetését!
          -- kurzor attribútumok, lásd példa-6-14 
     7.) Írjuk ki azon dolgozók nevét és fizetését, akik fizetése nagyobb mint 
          egy olyan szám, amelyet a felhasználó fog majd futás közben megadni!
          -- felhasználói/helyettesítő változók: &numerikus_valt, '&karakteres_valt'
     8.) Í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, lásd példa-6-17 
     9.) Növeljük meg a hivatalnokok (CLERK) fizetését a saját fizetésük 20%-ával!
          -- for update kurzor módosításhoz, lásd ugyanez a feladat: példa-6-43 
   10.) Módosítsuk a dolgozók nevét írjuk át, hogy csak a kezdőbetű legyen nagy,
          a többi betű kicsi, továbbá a dolgozók fizetését is növeljük meg 2 %-kal!
          -- for update kurzor módosításhoz, lásd példa-6-43 
   
-- -- --
  További gyakorló feladatok az Oracle Példatárból
   > Önálló gyakorlás: Oracle Példatár Feladatok.pdf 9.fejezet 9.1-9.14.feladatok
  -- 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!)
 
   -- -- -- -- -- ÜNNEP: 2017.05.01. május elseje -- -- -- -- --

 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G |«   
   11.GY: 2017.05.08.  --- PL/SQL: kivételkezelés, tárolt eljárások és függvények
   
  PL/SQL összefoglalás, és a II.ZH előtti összefoglalás, konzultáció, kérdés/válasz 
  Emlékeztető: Köv.héten II.zh: 12.gyak. (2017.05.15.) két részből áll:
  > Oracle PL/SQL (gépes zh) 9-11.gyakorlatokból: Oracle Példatár 9-10.fej. feladatai
  > [AB1EA (papíros zh)] 10-12.előadásokból: Tk.3.-4.fej.: Relációs sématervezés
   
 PL/SQL összefoglalás:
   > Oracle PL/SQL angol nyelvű tutorial: PL/SQL Tutorial
      -- Tutorial példáihoz a táblák létrehozása: createCust és insertCust
   > Oracle PL/SQL doksi: Oracle 11gR2 doc PL/SQL Language Reference
   > Oracle PL/SQL, ehhez Oracle 11gR2 doc PL/SQL Language Reference
   -- Az Oracle doksikban szereplő DML példák kipróbálásához: createHRtables
     
     5/7.rész:  PL/SQL kivétel- és hibakezelés >> 11.fej. PL/SQL Error Handling
      >> példa-11-5 és tábla-11-2 előre definiált kivételek
      >> példa-11-8 felhasználó által definiált kivételek
      >> (összefoglaló) plsql_07_kivetelek.pdf, Kivételekre_példa 
      
     6/7.rész:  PL/SQL eljárások és függvények >> 8.fej. PL/SQL Subprograms
      >> példa2-19 Alprogramok (már itt is volt függvény: 2.fej. Alapok)
      >> példa4-1 IF-THEN utasítás (már itt is volt eljárás: 4.fej. Utasítások)
      >> (összefoglaló) plsql_06_alprogramok.pdfAlprogramokra_példa
      >> (elemi programozási feladatok alprogramokra) feladatok.txt
      7/7.rész:  Triggerek 
    
   > FELADATSOR 5/C ---PL/SQL--3.feladatok:
     -- Ehhez is, mint a DML-hez: createDolg (no constraint)
     -- A PL/SQL blokk előtt minden alkalommal állítsuk be: SET SERVEROUTPUT ON
    1-10.) Lásd az előző heti gyakorlaton az első PL/SQL feladatokat: ezeket most
           írjuk át eljárásokra/függvényekre, plusz legyen benne hiba- és kivételkezelés! 
      -- Előre definiált kivételek: NO_DATA_FOUND, TOO_MANY_ROWS, lásd példa-11-5
     2.) Írjuk ki KING fizetését (olvasás táblából változóba és a képernyőre való kiíratás)
          abban az esetben,  ha pontosan egy KING nevű dolgozó szerepel a táblában, 
          viszont ha nincs ilyen nevű dolgozó vagy több ilyen is van, akkor azt írjuk ki!
     (...) -- Előre  definiált és felhasználói kivételek. Alprogramok (függvények, eljárások)
    11.) a.) Írjunk meg egy függvényt, ami az azonosító alapján visszaadja a nevet!
           b.) Írjunk meg egy eljárást, ami az azonosító alapján egy OUT változóban
           visszaadja a nevet! (alprogramok: függvények és eljárások/procedúrák)
    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.
           (itt most a módosítást az UPDATE utasítással végezzük, és nem plsql-ben)
     
-- -- --
   További gyakorló feladatok az Oracle Példatárból
   > Önálló gyakorlás: Oracle Példatár Feladatok.pdf 10.fejezet feladatai
  -- 3a_alprogr.sql - tárolt alprogramok
     Egyszerű számnövelő példa a PL/SQL függvényekre és eljárásokra.
  -- 3b_csomag.sql - csomag
     Egyszerű példa egy getemp eljárást és avg_salary fv-t tartalmazó csomagra.
  -- 3c_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! 
  -- 3d_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.
  -- 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)
         
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G |«   
   12.GY: 2017.05.15.  --- II.ZH: fépes Oracle PL/SQL [+Tervezés v.j.megajánló]  
     
 > II.ZH témaköre: Oracle PL/SQL gépes dolgozat
   > I. 40-45 perc (24 pont) gépes 9-11.gyakorlatok anyaga
      >> Oracle Példatár 8-10. fejezeteinek feladatai --  > 4 feladat * 6 pont
   > II. 40-45 perc (18 pont) papíron: A 10-12. előadások anyagából 
       >> Ullman-Widom Tankönyv: Relációs sématervezés
       >> 4.fej. E/K diagram és átírása relációs modellé  --> 6 pont (rzh10)
       >> 3.fej. Relációs adatbázisok tervezése --> 12 pont (rzh11, rzh12)

-- -- --
 > ZH után: Ellenőrzésre a ZH részpontok és gyak.jegyek hallgato/[jelszóval]
    a jelenléti ívben (név nélkül -> 4kar-kóddal)  [itt: .pdf] lsd 3/4 és 4/4 lapján
   
 top | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G13G |«   
   
   JavZH: 2017. május 26., péntek 10:15-11:45 2.520 MI labor
   illetve 2017. május 29., hétfő 10:15-11:45 2.124 MS labor 
   GyakUV: 2017. június 2., péntek 10:15-11:45 2.520 MI labor
   (gyakorlati utóvizsgára a Neptunban 24 órával előtte kell jelentkezni)
   
   > Az egyik dolgozat (és csak az egyik) pótolható/javítható, akinek a javítás
      után is valamelyik zh-ja elégtelen, azok elégtelen gyakorlati jegyet kapnak,
      gyakorlati utóvizsgával tudnak gyakorlati jegyet szerezni, gyakUV -> Neptun!