Adatbázisok EA+GY - Rekurzió, SQL használata programban
   
   > Adatbázisok 7.EA (Rekurzió) 
   > Adatbázisok 8.EA (SQL/PSM, PL/SQL)
   > Oracle PL/SQL: Oracle Junior EA >> Oracle PL/SQL.pdf 
   > 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
   
  -- -- --  --
    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
   
      
  -- -- --  --
      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
    -- Adatbázisok 7.EA
    -- 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). 
     
   >> 3.3.1. SQL szabvány szerint (csak papíron)
        (konkrét adatbázis-kezelő rendszerekben eltérő megvalósítások)  
   
            WITH RECURSIVE eljut(honnan, hova) AS
                  (SELECT honnan, hova FROM jaratok
             UNION
                  SELECT eljut.honnan, jaratok.hova
                  FROM eljut, jaratok
                  WHERE eljut.hova = jaratok.honnan)
            SELECT hova FROM eljut WHERE honnan='DAL';
   
         --- Kérdés: itt miért fontos kiemelni az UNION (halmaz) és
                           UNION ALL (multihalmaz) közötti különbséget?
     
   >> 3.3.2. Az Eljut feladat gépes megvalósítása Oracle-ben:
     -- Ezzel a scripttel jaratok_tabla.txt készítsünk saját táblát.
     --  A fenti szabvány SQL megoldás csak egy kis változtatással
         fut le gépes környezetben! Például Oracle 11gR2 megoldás:
   
            with eljut (honnan, hova) as
                   (select honnan, hova from jaratok
               union all
                    select jaratok.honnan, eljut.hova
                    from jaratok, eljut
                    where jaratok.hova=eljut.honnan
                    )
                SEARCH DEPTH FIRST BY honnan SET SORTING
                CYCLE honnan SET is_cycle TO 1 DEFAULT 0
            select distinct honnan, hova from eljut order by honnan;
     
     -- Példák az Oracle SQL Language Reference 11.2.pdf dokumentációban:
         >> Rekurzió with-utasítással: Recursive Subquery Factoring: Examples
   
  >> 3.3.3. Hierarchikus lekérdezésekre Oracle megoldás (8.ea.pdf legvégén)
   > SQL Lang.Ref: Hierarchical QueriesHierarchical Query Examples
      SELECT ... FROM... WHERE ... START WITH ... CONNECT BY PRIOR ...
       
  >> 3.3.4. Nézzük meg hogyan tudjuk PL/SQL-ben megvalósítani:

   > 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.
 
    
  -- -- --  --
      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 
       
   
     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