10.gyak. Lekérdezések kifejezése Datalog szabályokkal
és PL/SQL programozás II. (sémában tárolt eljárások)
   
-- A gyakorlat táblás része: Lekérdezések logikai lekérdező nyelven:
> E4. Lekérdezések kifejezése biztonságos Datalog szabályokkal,
    és relációs algebrai kifejezések (kifejezésfa) Datalogba való átírása
   
-- gépes III. témakör: Oracle PL/SQL, mint SQL/PSM megvalósítás
> 3.4. PL/SQL tárolt eljárások, függvények és csomagok
> 3.5. PL/SQL hiba- és kivételkezelés
> 3.6. PL/SQL triggerek
> PL/SQL FELADATOK-2.
   

E4. Lekérdezések kifejezése Datalogban
   
Áttekintés:
- Az 1-2. gyakorlat lekérdezéseit először természetes nyelven fogalmaztuk meg, majd
  "táblákban gondolkodva" azt néztük meg, hogyan mely táblából milyen műveletekkel
  tudjuk megkapni az eredménytáblát, ezt megadtuk relációs algebrában (halmazokon).
- Ezután a 3-4. gyakorlaton SQL SELECT utasítással (multihalmazokon) fejeztük ki
  ugyanezeket a lekérdezéseket. Az 5-6. gyakorlaton néztünk további lehetőségeket
   az SQL SELECT-ben, majd kiterjesztettük a relációs algebrát erre a lehetőségekre.
- A mai gyakorlaton visszatérünk az 1-2. gyakorlatok relációs algebrai lekérdezéseire
  és a lekérdezéseket fejezzük ki (nem rekurzív) biztonságos Datalog szabályokkal.
   
Segédanyag:  
- Relációs algebra Datalog átírása vezérfonala: AB1_Datalog_pp25_27.pdf
- Tankönyvben [Ullman-Widom] 5.3-5.4. Datalog szabályok és lekérdezések
   
Datalog feladatok: 
Tankönyv feladatai:
Termék-PC-Laptop-Nyomtató adatbázis (lásd az előadáson szereplő példákat)
Hajóosztályok-Csaták-Kimenetelek adatbázis
A fenti linkeken elérhető feladatokat fejezzük ki biztonságos Datalog programmal!
   
Megjegyzés: A rekurziót a következő gyakorlaton tárgyaljuk, például a tranzitív lezárt
nem fejezhető ki  relációs algebrában, viszont rekurzív Datalog programmal megadható.
    

SEGÉDANYAGOK: ZH-n is használható SQL, PL/SQL Ref.
A ZH-n a tűzfalon keresztül is elérhető és használható a dokumentáció:
http://medusa.inf.elte.hu/ tanszéki honlapon alul Oracle linken található
Online documentation for Oracle 11g R2 bal oldali menüből kiválasztva
a harmadik sorban  Database Administration és itt a harmadik dobozban:
SQL, PL/SQL, and PL/SQL Packages       
SQL Language Reference
SQL Language Quick Reference
PL/SQL Language Reference
PL/SQL Packages and Types Reference  
HTML   PDF
HTML   PDF
HTML   PDF
HTML   PDF   
Itt érdemes átnézni a PL/SQL Lang.Ref. példáit, mint ahogy múlt héten néztük,
például Cursors részben "FOR UPDATE"-re kereséssel az "Example 6-43"-t. 
   
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
- Ullman/Chang (Standford) Using Oracle PL/SQL
- Ullman/Chang (Standford) Constraints and Triggers
- PL/SQL Technology Center (Oracle 11g PL/SQL)
    

3.4. PL/SQL tárolt eljárások, függvények és csomagok
   
-- Példák PL/SQL függvények és eljárások használatára plsql_proc_fv.sql
-- Példák csomag használatára: plsql_csomag.sql és plsql_package.sql (N.T.)
-- PL/SQL Language Reference 11gR2 >> 8.fej. PL/SQL Subprograms
-- PL/SQL Language Reference 11gR2 >> 10.fej. PL/SQL Packages
   
Gyakorló feladatok az Oracle Példatárból  -- Ehhez: cr_dept_emp.sql
Lásd Példatár "10.fejezet. Kivételkezelés, alprogramok, triggerek" feladatai
     
3.5. PL/SQL hiba- és kivételkezelés
   
-- Példák hiba- és kivételkezelésre:  plsql_exception.sql  (Nikovits Tibor)
-- PL/SQL Language Reference 11gR2 >> 11.fej. PL/SQL Error Hangling
    
Gyakorló feladatok az Oracle Példatárból  -- Ehhez: cr_dept_emp.sql
Lásd Példatár "10.fejezet. Kivételkezelés, alprogramok, triggerek" feladatai
   
5a_kivetelkez.sql - Feladat kivételkezelésre
-   Írjunk egy olyan eljárást, amely kivételkezelést is tartalmaz és a jutalmat az
    emp táblából létrehozott dolgozo tábla jutalék (comm) értékéhez adja hozzá!
    A jutalom a dolgozó fizetésének 10%-a, feltéve, ha a fizetés 3000 dollár
    alatt van, egyébként csak egy "Boldog Karácsonyt!" üdvözletet kap.
   

3.6. PL/SQL triggerek 
     
-- PL/SQL Language Reference 11gR2 >> 9.fej. Triggers
   
Gyakorló feladatok az Oracle Példatárból  -- Ehhez: cr_dept_emp.sql
Lásd Példatár "10.fejezet. Kivételkezelés, alprogramok, triggerek" feladatai
   
6a_trigger.sql - triggerek
-   Hozzunk létre BEFORE triggert, amely megakadályozza a munkaidőn
     kívüli adatmanipulációkat az emp táblán! Írassuk ki, milyen műveleteket
     kíséreltek meg végrehajtani munkaidőn kívül!
     
6b_triggerek.sql - triggerek
-  Írjunk triggert (és ellenőrizzük is a működését), amely megakadályozza
    az elnökre (president) vonatkozó törlő, beszúró és adatmódosító
    DML utasítások működését! (a tesztelő script programban a hivatkozási
    megszorítás felfüggesztése illetve a végén az újbóli engedélyeztetése)
        
PL/SQL FELADATOK-2  
      
-- Táblák és az eddigi sql feladatok: table_dolgozo.txt 
-- Ehhez a táblák létrehozása: create_dolgozo.txt

-- Az előző heti feladatok folytatása, lásd 9.gyak.#plsql_feladatok-1  
    (aki azt még nem fejezte be, előbb azokat írja meg és utána ezeket).
   
10.) Módosítsuk a fizetéseket egy kurzorral végighaladva rajtuk!
       Adjunk hozzá mindenki fizetéséhez n*10 ezret, ahol n a nevében 
       levő magánhangzók száma (a, e, i, o, u)!
       (módosítás kurzorral, beépített függvények)
   
11.) Írjunk meg egy package-beli függvényt, ami visszaadja
       a paraméterében levő magánhangzók számát!
       Módosítsuk a fizetéseket ennek a függvénynek a segítségével.
       (UPDATE utasítással, és nem plsql-ben) (package)
   
12.) Írjunk meg egy csomagot (package-et), amelyben van egy
             TIPUS(input_szoveg IN VARCHAR2)  
       nevű függvény, amelyik a paraméterül kapott karakterláncról eldönti,
       hogy az numerikus érték, dátum, vagy egyik sem, azaz csak szövegként
       értelmezhető! A dátumok esetén elég ha a függvény egyetlen dátum-
       formátumot (pl. az alapértelmezettet) felismer. A függvény által visszaadott
       érték legyen mondjuk: 1, 2, illetve 3, a parameter típusának megfelelően.
   
       A függvényt próbáljuk is ki procedurális utasításokban is és SQL
       utasításokban is! Pl. valtozo := <package_nev>.tipus(parameter);
       SELECT oszlop1, <package_nev>.tipus(oszlop1) FROM tabla_nev
       formában. Ehhez vigyük fel egy tábla karakteres oszlopába a következő
       adatokat: '1240', '12A3', 'Blabla', '2008-04-19', '12.5', '2008-apr-19'
       (Használhatjuk az Oracle konverziós függvényeit plusz a hibakezelést.)
     
13.) Írjunk meg egy package-beli procedúrát vagy függvényt, ami különböző
       típusú input paraméterek esetén lényegesen eltérően működik! (túlterhelés)
       Például: p(13) -> szám, p('abc') -> szöveg, p('2008-02-02') -> dátum
   
Fel a lap tetejére                          Vissza az AB1gyak oldalára (főmenü)