8.gyak. Oracle: hierarchikus lekérdezések (CONNECT BY PRIOR)
PL/SQL programozás I. (alapok)
   
-- gépes feladatok Oracle-ben:
> 2.5. Hierarchikus lekérdezések (CONNECT BY PRIOR)
-- gépes III. témakör: Oracle PL/SQL alapok
3.1. PL/SQL alapok, változóhasználat, vezérlési szerkezetek
> 3.2. SELECT INTO, hivatkozási és összetett adattípusok
> PL/SQL FELADATOK-1.
      
SEGÉDANYAGOK: ORACLE  PL/SQL:
Oracle® Database 11g Release 2 Documentation Library
- Oracle PL/SQL Language Reference 11gR2         HTML   PDF
- Oracle PL/SQL Packages and Types Ref.11gR2  HTML   PDF
   
További segédanyagok a PL/SQL-hez:
- Cinkóczki László, Oracle Junior, 2012. márc.8-i ea: PL/SQL
- 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
- PL/SQL Technology Center (Oracle 11g PL/SQL)
   

2.5. Hierarchikus lekérdezések az Oracle-ben (CONNECT BY PRIOR)
      Családfák. SFW START WITH ... CONNECT BY PRIOR ...
 
Segédanyagok:
>> Oracle: Hierarchikus lekérd.pdf  (jelszavas anyag) példáit próbáljuk ki az Oracle-ben!
     -- ehhez a HR séma tábláihoz készítsük el a szinonimákat create_synonym
>> hiera_lekerd.txt (Nikovits Tibor) valamint AB1_Hierarchikus.pdf (Kiss Attila)
    
Feladatok a hierarchikus lekérdezésekhez
- Táblák és feladatok:  dolgozo_tabla.txt  Ehhez a táblák létrehozása:  create_dolgozo.txt
- Listázzuk ki az dolgozo tábla alapján a főnökökhöz tartozó beosztottak nevét és osztályukat.
   a.) A dolgozo tábla önamagára való hivatkozásával (többtáblás lekérdezés sorváltozókkal).
   b.) A CONNECT BY utasításrész használatával, a hierarchikus szerkezetet 'KING'-től
        felülről lefelé bejárva.
   c.)  Alulról felfelé járjuk be a hierarchikus szerkezet egy ágát 'SMITH'-től kezdve.
   
Megj: Példatár 3.fejezet elméleti összefoglalóban "Hierarchikus adatszerkezet megjelenítése"
    
3.1. PL/SQL alapok, változóhasználat, vezérlési szerkezetek
   
PL/SQL (névtelen) blokkok szerkezete
-- PL/SQL Language Reference 11gR2 >> 2.fej. Alapok
    [1_deklarációs_rész] 2_végrehajtható_rész [3_kivételkezelő_rész] 
   
Gyakorló feladatok az Oracle Példatárból
--  Lásd Feladatok.pdf (8.fejezet feladatai)  -- Ehhez: cr_dept_emp.sql
   
Változóhasználat, az adatok képernyőre való kiíratása 
1a_valtozok.sql - --  Oracle DBMS_OUTPUT csomag PUT_LINE eljárása
--  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 változói.
--   Í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
 
Amikor a lekérdezés egy sort ad vissza: SELECT INTO utasítás
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). 
   
Vezérlési szerkezetek a PL/SQL-ben
-- PL/SQL Language Reference 11gR2 >> 4.fej. Control Statements
-- 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)
   
További gyakorló feladatok: Lásd Példatár "8.fejezet.
Változóhasználat, vezérlési szerkezetek a PL/SQL-ben" feladatai
   

3.2. SELECT INTO, hivatkozási és összetett adattípusok
-- SELECT INTO csak akkor használható, ha a lekérdezés pontosan egy sort ad.
    Ha a lekérdezés több sorral tér vissza kurzort kell használni: 9gyak#3.3. Kurzor
-- Példák rekordok, kollekciók (tömbök) plsql_peldak.sql (Nikovits Tibor)
-- PL/SQL Language Reference 11gR2 >> 3.fej. PL/SQL Data Types
-- PL/SQL Language Reference 11gR2 >> 5.fej. Collections and Records
   
Gyakorló feladatok az Oracle Példatárból
--  Lásd Feladatok.pdf (9.fejezet feladatai)  -- Ehhez: cr_dept_emp.sql
     
Hivatkozási adattípus, %TYPE, %ROWTYPE
2a_select_into.sql - A SELECT ... INTO utasítás
--   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: IV.mo.
--   Valamint rejtett kurzorral való másféle megoldására még visszatérünk. 
   
Rekord adattípus, gyűjtőtábla típus
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.  
     

PL/SQL FELADATOK-1  
      
-- 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)
     Írjon PL/SQL blokkot tartalmazó script programot, amely a felhasználótól
     bekér egy egész számot és bekéri a nevét, majd a PL/SQL blokkból kiírja
     "Szia <X.Y. (név)>, a kedvenc számod ez: <szám> " (mo: '&nev' és &szam)
     
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!
 
3.) Írjuk ki KING belépési dátumát és fizetését különböző formátumokban, 
     mint például 1981.11.17, 1981-november-17, stb (dátum formátumok)
     (pontosan egy sorból álló több oszlopos lekérdezés)
     
4.) 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)
-- Segítségképpen: Tábla típus definiálása:
     TYPE tábla_típus_neve  IS TABLE OF adattípus INDEX BY BINARY_INTEGER;
         ahol az adattípus lehet %TYPE vagy %ROWTYPE-al megadva,
         lehet előre definiált típus vagy általunk definiált rekordtípus.
     Tábla deklarálása: tábla_név   tábla_típus_neve;
     Hivatkozás a tábla elemeire: tábla_név(index)
     PL/SQL tábla attribútumok, például: tábla_név.COUNT hány eleme van a táblának.
   
További gyakorló feladatok: Lásd Példatár "9.fejezet.
Hivatkozási és összetett adattípusok" feladatai
   
Fel a lap tetejére                          Vissza az AB1gyak oldalára (főmenü)