A honlapomra kitett feladatokat folyamatosan kell megoldani, de csak néhány alkalommal összegyűjtve kell majd levélben elküldeni a megoldásokat. Az egyes határidőket mindig megadom majd az irf_tematika.txt nevű állományban. A beadandó feladatokat lehetőleg 2 fős csoportokba szerveződve kellene megoldani. Azokat a feladatokat, ahol lekérdezést vagy programot kell beadni, az alábbi egységes formában, .txt állományokban kérem: *** Feladat szövege *** Lekérdezés vagy program *** A futtatás eredménye **************************************************************************** Elküldendő: 5 trigger 1. feladat (Trigger) 1/1 A NIKOVITS nevű oracle felhasználó tulajdonában van egy DOLGOZO nevű tábla. Hozzunk létre a saját sémánkban egy azonos nevű és tartalmú táblát, valamint egy TRIGGER_LOG nevű táblát, aminek a következő a szerkezete: ( idopont DATE, muvelet VARCHAR2(20), esemeny VARCHAR2(80) ) Hozzunk létre egy triggert, ami akkor aktivizálódik ha a dolgozo tábla fizetes oszlopát módosítják. A trigger a következő műveleteket végezze el: Ha a dolgozó új fizetése nagyobb lesz mint 4000 akkor erről tegyen egy bejegyzést a trigger_log táblába. Az esemény oszlopba írja be a régi és az új fizetést is. Az elnök (foglalkozas = 'PRESIDENT') fizetését ne engedje módositani. (A módosítás után a fizetés maradjon a régi.) Erről is tegyen egy bejegyzést a trigger_log táblába. Az esemény oszlopba írja be, hogy a fizetés nem változott. 1/2 Hozzunk létre egy TRIGGER_LOG2 nevű táblát is, aminek a szerkezete a következő: ( idopont DATE, muvelet VARCHAR2(20), uj_osszfiz NUMBER ) Hozzunk létre egy triggert, ami akkor aktivizálódik ha a DOLGOZO táblára valamilyen módosíto műveletet (INSERT, DELETE, UPDATE) hajtanak végre. A trigger írja be a trigger_log2 táblába a módosítas időpontját, a műveletet és az új összfizetést (az összes dolgozó fizetéseinek összegét). Ha az új összfizetés nagyobb lenne mint 40000, akkor a trigger utasítsa vissza a módosíto műveletet, és hibaüzenetként küldje vissza, hogy 'Túl nagy összfizetes'. Ez esetben naplóznia sem kell. 1/3 Hozzunk létre egy nézetet az alábbi utasitással, ami az osztályonkénti összfizetést tartalmazza. (Előtte hozzuk létre az EMP, DEPT táblákat is.) CREATE OR REPLACE VIEW dept_sal AS SELECT dname, SUM(sal) sumsal FROM dept, emp WHERE emp.deptno = dept.deptno GROUP BY dname; Hozzunk létre egy triggert, aminek segitségével lehetővé valik a nézet módositása (csak UPDATE utasitással) oly modon, hogy a trigger a modositast visszavezeti az alaptáblákra. Ha az osztaly neve (DNAME) változik, akkor az változzon meg a DEPT táblában, ha pedig az összfizetes (SUMSAL) változik, akkor az adott osztály összes dolgozójanak fizetése egyforma mértékben változzon meg, úgy hogy a változtatás utáni összfizetés a kivánt legyen. Természetesen probáljak is ki, hogy a triggerek megfelelően műkodnek-e. Küldjék el a műveleteket es a naplótáblak illetve a nézet tartalmát is. 1/4 Hozzunk létre egy DDL_LOG nevű táblát, aminek az alábbi a szerkezete: ( tulajdonos VARCHAR2(30), obj_nev VARCHAR2(30), obj_tipus VARCHAR2(30), muvelet VARCHAR2(400), idopont DATE ) Hozzanak létre egy triggert, ami bármelyik saját maguk által indított DDL művelet eredményét naplózza a fenti táblába. Pl. egy ALTER TABLE t1 ADD(o2 NUMBER); esetén ezeket írja be -> , 'T1', 'TABLE', 'ALTER', TIPP: 12c dokumentáció PL/SQL Language Reference 9. fejezet -> Event Attribute Functions (Triggers for Publishing Events címszónál) Vigyázat! A fenti trigger a jövőben is el fog indulni, akkor amikor már rég elfeledkeztünk róla, és meglepő hibaüzeneteket eredményezhet. 1/5 Hozzunk létre egy NAPLO nevű táblát, aminek az alábbi a szerkezete: ( datum DATE, felh VARCHAR2(100), gep VARCHAR2(100), ip VARCHAR2(100), osuser VARCHAR2(100)) Hozzunk létre egy triggert, ami a bejelentkezéseket naplózza a fenti táblába. Naplózzuk a felhasználó (Oracle-beli) azonosítóját, a kliens gép nevét és IP címét valamint a kliens gépen az operációs rendszerbeli azonosítót. Most mindenkinek csak a saját bejelentkezései naplózásához van joga, de a trigger nagyon hasonló lenne az általános esetben is. TIPP: nézzük meg az SQL Language Reference doksiban a SYS_CONTEXT függvényt