10.gyak. PL/SQL programozás I.
     
> III. témakör: PL/SQL programozás: 10-12.gyak. -- gépes feladatok
   >> 3.1. PL/SQL alapok, változóhasználat, vezérlési szerkezetek
   >> 3.2. SELECT INTO, hivatkozási és összetett adattípusok
   >> 3.3. PL/SQL kurzor, explicit kurzor, for update záradék  
   >> 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:
- 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)
           
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
[I. a deklarációs,] II. a végrehajtható és [III. a kivételkezelő] rész
   
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.
1a_valtozok.sql - Változóhasználat, az adatok képernyőre való kiíratása 
      (Az Oracle beépített DBMS_OUTPUT csomag PUT_LINE eljárása).
--   Í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
 
A SELECT utasítás a PL/SQL-ben
1b_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).
--   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
-- 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)
      

3.2. SELECT INTO, hivatkozási és összetett adattípusok
-- Példák plsql_peldak.sql
-- PL/SQL Language Reference 11gR2 >> 3.fej. PL/SQL Data Types
-- PL/SQL Language Reference 11gR2 >> 5.fej. Collections and Records
   
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 (nézettáblával).
--   Valamint rejtett kurzorral való másik 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.  
       

3.3. Kurzor, explicit kurzor, for update záradék
-- Példák kurzor használatára: plsql_kurzor.sql
-- PL/SQL Language Reference 11gR2 >> 6.fej. Static SQL/Cursors
   A ZH-n is használható a dokumentáció, érdemes átnézni a példákat,
   például FOR UPDATE-re >> "Example 6-43", mint az alábbi példa:
   
3a_kurzor.sql - Kurzor, kurzorattribútumok (%FOUND, %NOTFOUND)
-    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!)

3b_impl_kurzor.sql - Implicit kurzor, kurzorhasználat FOR ciklusban
-    Hozzuk létre a dolgozo táblát az emp táblából, és bővítsük azt egy sorszám
     oszloppal. Ezt töltsük fel 1-től kiindulva egyesével növekvő értékkel minden
     dolgozó esetén a dolgozók nevének ábécé sorrendje szerint.

3c_expl_kurzor.sql - Explicit kurzor
-    2d feladat másik megoldása

3d_current_of.sql - Explicit kurzor, FOR UPDATE, CURRENT OF 
-    3b, 3c feladat harmadik megoldása
   

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)
 
2.) Írjuk ki KING fizetését (olvasás táblából változóba)
 
3.) Írjuk ki KING belépési dátumát és fizetését különböző
     formátumokban 1981.11.17, 1981-november-17, stb
     (dátum formátumok, több oszlopos lekérdezés)
 
4.) Írjuk ki a dolgozók nevét és fizetését (kurzor használata)
 
5.) Írjuk ki a 3. 5. és 8. legnagyobb fizetésű dolgozó nevét, fizetését
     (kurzor attribútumok)
 
6.) 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.
   
7.) Írjuk ki a dolgozók nevét és fizetését mind a 3-féle kurzorhasználattal.
 
8.) Írjuk ki azon dolgozók nevét és fizetését, akik fizetése nagyobb mint
     a felhasználó által megadott szám.
 
9.) Í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)
 
(folyt.köv. 11.gyak.#plsql_feladatok2)
 

További gyakorló feladatok találhatóak az Oracle Példatárban
--  Lásd Feladatok.pdf (8-9.fejezet feladatai)  
-- Ehhez: a táblák létrehozása  cr_dept_emp.sql
    
 Vissza az AB1 gyakorlat oldalára             Vissza a Kezdőlapra