9.gyak. PL/SQL-1 Változóhasználat
   
Előző 8.gyak                        Következő 10.gyak
    
-- III. témakör: Oracle PL/SQL alapok gépes gyakorlat
   (folyt.: kurzor definálása és használata -> köv.héten)
> 3.1. PL/SQL alapok: változóhasználat
> 3.2. PL/SQL alapok: vezérlési szerkezetek
> 3.3. DML utasítások és SELECT INTO
> 3.4. Összetett adattípusok, gyűjtőtábla
> 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
- Az Oracle dokumentációban szereplő példák kipróbálásához:
   >> Lekérdezésekhez: createHRsyn
   >> Módosításhoz: createHRtables
   
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
- Ullman/Chang (Standford) Using Oracle PL/SQL
- PL/SQL Technology Center (Oracle 11g PL/SQL)
    
3.1. PL/SQL alapok: változóhasználat
   
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). 
    
3.2. PL/SQL alapok: vezérlési szerkezetek
   
Vezérlési szerkezetek a PL/SQL-ben
-- PL/SQL Language Reference 11gR2 >> 4.fej. Control Statements

Gyakorló feladatok az Oracle Példatárból
--  Lásd Feladatok.pdf (8.fejezet feladatai)  -- Ehhez: cr_dept_emp.sql
-- 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.3. SELECT INTO, hivatkozási 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, lásd köv.héten.
-- PL/SQL Language Reference 11gR2 >> 3.fej. PL/SQL Data Types
   
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. 
   

3.4. Összetett adattípusok, gyűjtőtáblák
-- 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, lásd köv.héten.
-- Példák rekordok, kollekciók (tömbök) plsql_peldak.sql (Nikovits Tibor)
-- 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
        
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.
 
Házi feladat PL/SQL-ben  (Határidő: 11.gyakorlat 2015.május 27-28)
Az előző 8.gyakorlaton és az előadáson vett "Eljut feladat" megvalósítása PL/SQL-ben
-- Az eljut-feladatnak több változatát is oldjuk meg PL/SQL programmal, ennek
    az első Rek1. változata kötelező, a többi változat szorgalmi feladat a 11.gyakorlatra.
-- Az alábbi feladat a tankönyv (Ullman-Widom kék könyv) 10.2 szakaszára épül.
-- Az Eljut-feladat: Jaratok(legitarsasag, honnan, hova, koltseg, indulas, erkezes)
    táblában repülőjáratok adatait tároljuk. Azt keressük, hogy Dallasból mely városokba
    tudunk eljutni (átszállás nélkül közvetlenül vagy egy vagy több átszállással).
-- Készítsünk ebből saját példányt: jaratok_tabla.txt és az alapján dolgozzunk
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?
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?
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, vagyis ha több
   járattal  utazunk és átszállásra van szükségünk, akkor 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.
     
 Fel a lap tetejére                          Vissza az AB1gyak oldalára (főmenü)