Adatbázis alapú rendszerek 2010 levelező

A gyakorlat követelményei

Projektmunka

Rézletek: Projektötletek:

SSADM

SSADM fóliák

Feladat: Dolgozók adatait nyilvántartó rendszer. Készítsük el a feladat 0., 1., és 2. szintű adat folyam diagramját!
Készítsük el a folyamatok I/O diagramjait!
Készítsük el a folyamatok funkciómeghatározásait!
Készítsük el a feladat egyed-kapcsolat diagramját!
Készítsük el az egyed-esemény mátrixot!
Készítsük el a szerep-funkció mátrixot!

SQL*Plus

SQL*Plus segédanyag

Segédanyagok: Feladatok:
  1. Változtassuk meg a jelszavunkat:
    alter user user_name identified by new_password;
  2. Készítsünk sql fájlt amely kiírja azon táblák nevét amelyek több sort tartalmaznak mint az 1. paraméter! megoldás
  3. Írassuk ki a 1. paraméternél több táblával rendelkező felhasználókat! Rávezetésként meg lehet oldani a "kinek hány táblája van"-feladatot. megoldás

PL/SQL

PL/SQL - I: Alapok, Változók, Vezérlési szerkezetek, Gyűjtőtáblák, Kivételkezelés.
PL/SQL - II: Kurzorok, Alprogramok.

Feladatok:
  1. Kérjen be két egész számot és döntse el, hogy az összegük páros-e vagy páratlan. megoldás
  2. Írjon PL/SQL programot, amely kiírja az emp tábla sorainak számát és az átlagfizetést. megoldás
  3. Írjon PL/SQL programot, ami létrehozza és feltölti a fibon nevű táblát a Fibonacci sorozat elemeivel. megoldás
  4. Határozzuk meg egy PL/SQL program segítségével a felhasználó által megadott telephelyen dolgozók bérösszegét. megoldás
  5. Hozzunk létre egy gyűjtőtáblát, tegyük bele az elemeket a demo.vevő táblából, adjuk hozzá még egy vevőt, módosítsuk a 22-es vevőt, töröljük ki a páratlan indexűeket, írjuk ki a tábla tartalmát. megoldás
  6. Írjunk egy PL/SQL programot amely a CLERK munkakörű embereknek megemelí a fietését 20%-al. Indokoljuk meg miért hibás ez program! Javítsuk ki ROWID használatával! Javítsuk ki FOR UPDATE és CURRENT OF használatával!
  7. Íjunk egy függvényt, amely paraméterében atadott számnál többet keresők átlagbérét adja vissza. Írjunk PL/SQL programot ami meghívja a függvényt és kiírja az eredményét. megoldás
  8. Az emp táblából hozzon létre egy dolgozó táblát. Egy PL/SQL blokkot tartalmazó szkript programmal segítsen az elnöknek (president), aki a karácsony alkalmából jutalmazni akarja dolgozóit (önmagát nem!) az alábbi módon: 1) minden beosztott (akinek nincs további beosztottja) kapja meg a saját fizetése 10%-át jutalomként, 2) minden főnök (akinek van legalább egy beosztottja) kapja meg fizetése 8%-át, ha kettőnél több közvetlen beosztottja van, és 4%-át, ha legfeljebb kettő közvetlen beosztottja van. A jutalmazást a jutalék (comm) növelésével oldja meg. megoldás
  9. A RAPID RALLY autóversenyre benevezett versenyzők adatbázis sémája: rally(név, nemzetiség, feladatkör, minősítés, partner). Készítsen PL/SQL programot, amely minden versenyzőhöz megkísérel az alábbi feltételeknek megfelelő partnert keresni: 1) a partnerek nemzetisége egyezzen meg, 2) a partnerek minősítése legyen 20 ponton belül, 3) a feladatkörök illeszkedjenek. Tötse fel a partner oszlopot a feltételeknek megfelelően. megoldás

Java tárolt eljárások

Java nyelvű tárolt eljárások készítésének lépései:
  1. A java forráskódot vagy lokálisan írjuk meg és később töltjük fel a szerverre (A), vagy a szerveren hozzuk létre (B).
    1. Készítsük el a Java nyelvű forráskódot lokálisan, majd töltsük fel az Oracle szerverre!
      public class Hello {
        public static void sayHelloTo(String name) {
          System.out.println("Hello " + name + "!");
        }
      }
      A szerverre való feltöltés a loadjava paranccsal történik, ami megtalálható a Oracle kliens bin könyvtárában. Paraméterezése: loadjava -user usernév/jelszó@database -verbose -force -resolve file.java. A fenti példa esetén:
      loadjava -user h123456/jelszó@ORACAB10 -verbose -force -resolve Hello.java
    2. Java forráskód létrehozása az Oracle szerveren:
      CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "Hello" AS
        public class Hello {
          public static void sayHelloTo(String name) {
            System.out.println("Hello " + name + "!");
          }
        };
      /
  2. A forráskód a USER_SOURCE táblába kerül - soronként.
    SELECT text FROM USER_SOURCE WHERE name = 'Hello';
  3. SQL*Plus-ban hozzuk létre a tárolt eljárást!
    CREATE OR REPLACE PROCEDURE Hello( name IN VARCHAR2 ) AS 
    LANGUAGE JAVA NAME 'Hello.sayHelloTo(java.lang.String)';
    /
  4. Engedélyezzük a képernyőre való írást!
    SET SERVEROUTPUT ON SIZE 1000000
    CALL DBMS_JAVA.SET_OUTPUT(1000000);
  5. Hívjuk meg az eljárást!
    CALL Hello('ber');
Az adatbázis elérése Java tárolt eljárásból: használhatjuk a szerver oldalon a oracle.jdbc.driver.OracleDriver-t. Példa: az emp tábla listázása.
  1. Futtassuk le ezt a PL/SQL utasítást.
  2. Hozzuk létre az eljárást!
    CREATE OR REPLACE PROCEDURE emplist AS 
    LANGUAGE JAVA NAME 'EmpList.list()';
    /
  3. Futtassuk az eljárást.
    CALL emplist();

Triggerek

Trigger - I: Alapok.
Trigger - II: További példák.

Feladatok:
  1. Hozzuk létre a RAPID RALLY autóversenyre benevezett versenyzők tábláját. Készítsünk triggert, amely minden beillesztett versenyzőhöz megkísérel alábbi feltételeknek megfelelő partnert keresni: 1) a partnerek nemzetisége egyezzen meg, 2) a partnerek minősítése legyen 20 ponton belül, 3) a feladatkörök illeszkedjenek. Tötse fel a partner oszlopokat(!) a feltételeknek megfelelően. megoldás, megoldás
  2. Hozzuk létre a ALVÓ LAJHÁR Sport Egyesület által szervezett bajnokság adatbázisát. Készítsünk triggert amelyik minden új résztvevő csapathoz legenerálja a lejátszandó mérkőzéseket a mérkőzések táblában. Minden csapat egy mérkőzést játszik az adott bajnokság többi csapatával. megoldás, megoldás
    Írjunk másik triggert amelyik egy résztvevő törlése esetén törli annak a mérkőzéseit is. megoldás