9.GYAKORLAT (ADATBÁZISOK)
   
     Témakör: Oracle PL/SQL témakör 1.gyakorlata: Oracle Példatár 8.fejezete
     - Változóhasználat, vezérlési szerkezetek a PL/SQL-ben  
     - PL/SQL doksi: Oracle Database Rel.12.2 - PL/SQL Language Reference
       >> List of Examples (PL/SQL Lang.Ref.12.2) -- példákhoz: create_hr_tables.txt
   
     > SQL/PSM, PL/SQL: SQL4.pdf (2020.tavaszi AB1EA/HajasCs. 8.ea PL/SQL)
     > Az első PL/SQL gyakorlaton az ún. "Eljut feladat" rekurzív lekérdezésre írunk
        PL/SQL programot. Ehhez az alábbi PL/SQL alapokra lesz szükségünk: 
        -- Változóhasználat, Vezérlési szerkezetek: feltételes utasítások, ciklusok,
        -- DML utasítások, egy sort visszaadó SELECT INTO használata programban. 
      > Viszont a több sort visszaadó SELECT-re a kurzorok használata köv.órán, 
          a PL/SQL haladó témaköreit pedig majd két hét múlva tanuljuk, lépésenként.
      
      > Eljut feladat: Előző (az II.ZH után) 8.gyakorlaton  Eljut-feladat, Rekurzió
          >> SQL5.pdf (2020.tavaszi AB1EA/HajasCs. 10.ea végén) 
          -- Ehhez jaratok tábla: jaratok_tabla.txt
   
-- -- --  --    
    1.rész: PL/SQL alapjai, PL/SQL blokk >> 2.fej. PL/SQL 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, típusok, %TYPE, %ROWTYPE
      >> 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 (Eljut feladathoz csak INSERT)
           (köv.gyak. DML utasítások, implicit kurzor, kurzorattribútumok, folyt.köv.)
      >> (összefoglaló) 02_tipusok.pdf03_sql_dml.pdf05_valtozok.pdf
    
      2.rész: Feltételes utasítások, ciklusok >> 4.fej. PL/SQL vezérlő utasítások
      >> példa-4-4 if-then-elsif utasítás (ebben a példában is van pl. eljárás)
      >> példa-4-6 egyszerű case utasítás, és itt írjuk át grade := 'B' -> '&B'
           próbáljuk ki helyettesítési változóra: 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-15 FOR ciklus utasítás
      >> példa 4-28 WHILE ciklus utasítás
      >> (összefoglaló) 01_bevezetes.pdf; pl_02_vezerlo_utasitasok.txt
      
-- -- --  --    
   > PL/SQL FELADATSOR --1: 
     -- 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!'
   
     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.) Az "Eljut feladat" megvalósítása Oracle PL/SQL-ben
          SQL-ben lásd 8.gyakorlaton; és (2020.tavaszi 10.ea végén) SQL5.pdf 
          -- Ezzel a scripttel jaratok_tabla.txt készítsünk saját táblát.
    
   > 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)
   
   >> Szorgalmi feladatok: 
   > 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: (később, 11.gyak.) 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.
    

 
   Házi feladatok PL/SQL feladatok gyakorlása a következő gyakorlatra:   
    > Oracle Példatár Feladatok.pdf 8.fejezet 8.1-8.9.feladatok
 
   8.1. Feladat: Határozza meg egy PL/SQL program segítségével a felhasználó
          által megadott telephelyen dolgozók bérösszegét.
   
   8.2. Feladat: Írjon PL/SQL programot, amely meghatározza, hogy a felhasználó
          által megadott nevű és korú személy hány év múlva lesz, illetve hány éve
          már nagykorú. A kiírást valósítsa meg a PL/SQL blokkon belül.
   
   8.3. Feladat: Állítsa elő a felhasználó által megadott darabszámig a Fibonacci
          sorozat elemeit (0, 1, 1, 2, 3, 5,...). A megoldáshoz LOOP-ciklust használjon.
   
   8.4. Feladat: Írjon PL/SQL programot, amely a felhasználó által megadott
          telephelyen kiszámítja a legnagyobb fizetési különbséget.
          A feladatot oldja meg SQL és PL/SQL nyelven.
   
   8.5. Feladat: Írjon PL/SQL programot, amely bekér két egész számot, és kiírja
          a legnagyobb közös osztójukat. Használjon WHILE-ciklust.
   
   8.6. Feladat: Írjon programot, mely egy PL/SQL blokkban kiszámítja a felhasználó
          által megadott A számtól a szintén felhasználó által megadott B számig a
           páratlan számok négyzetösszegét. Használjon FOR-ciklust.
 
   8.7. Feladat: Írjon szkript programot, amely előállítja, és egymást követő sorokba
          kiírja a felhasználó által megadott két egész szám összes közös osztóját.
          Például 18 és 24 esetén: 1, 2, 3, 6.
   
   8.8. Feladat: Írjon programot, mely előállítja, és kiírja a felhasználó által
          megadott két egész szám közül legalább az egyikkel osztható első 11
          különböző számot. Például 3 és 4 esetén: 3, 4, 6, 8, 9, 12, 15, 16, 18, 20, 21.
   
   8.9. Feladat: Írjon programot, mely előállítja, és kiírja a felhasználó által megadott
          két egész szám legkisebb közös többszörösét. Például 8 és 12 esetén: 24.