A honlapomra kitett feladatokat folyamatosan kell megoldani, de csak néhány alkalommal összegyűjtve kell majd levélben elküldeni a megoldásokat. A beadandó feladatokat 2 fős csoportokba szerveződve lehet 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ő: Az alábbi leírásban szereplő JUTALOM nevű procedúra. A procedúra ciklusban való futtatása után az egyenlegek. (Elég az 'M' betűvel kezdődő tulajdonosok egyenlegét elküldeni, beleértve a Munkahelyet is). Az előkészületi lépések során lefuttatott utasításokat nem kell elküldeni! 6. feladat /* Előkészítő lépések. Ezeket a procedúra megírása előtt le kell futtatni. Készítsünk egy táblát (előtte még egy DOLG nevű táblát is), amely bankszámlák egyenlegét tartalmazza. Minden dolgozónak kezdetben legyen az egyenlege a fizetésének a tízszerese. A Munkahelynek is legyen egyenlege, a Kincstárnak is (ahová adót kell fizetni) és egy Boltnak is, ahol vásárolni lehet. A fenti lépéseket az alábbi utasítások végzik el. */ CREATE TABLE dolg(dnev,fizetes,foglalkozas) AS SELECT CAST(first_name||' '||last_name AS VARCHAR(30)), CAST(salary AS NUMBER), job_id FROM nikovits.employees; CREATE TABLE bankszamla(tulajdonos, egyenleg) AS SELECT dnev, fizetes*10 FROM dolg; INSERT INTO bankszamla VALUES('Kincstar', 50000000); INSERT INTO bankszamla VALUES('Munkahely', 20000000); INSERT INTO bankszamla VALUES('Bolt', 1000000); COMMIT; -- Ellenőrizzük a kezdeti egyenlegek összegét. Ennek nem szabad változnia az átutalások során. SELECT sum(egyenleg) FROM bankszamla; /* Előkészítés folytatása. Készítsünk egy triggert, ami egy bizonytalan végrehajtási környezetet szimulál, ami azt jelenti, hogy néha egy módosító utasítás nem fut le sikeresen, hanem kivételt dob. Generálunk egy véletlen számot, és ha 5-tel osztható, akkor legyen hiba. */ CREATE OR REPLACE TRIGGER bankszamla_trg BEFORE UPDATE ON bankszamla FOR EACH ROW DECLARE v_szam INTEGER; BEGIN v_szam := round(dbms_random.value(1,100)); IF mod(v_szam, 5) = 0 THEN raise_application_error('-20001', 'Hiba'); END IF; END; /* A fenti környezetben készítsük el a JUTALOM nevű procedúrát, amely az egyenlegeket módosítja annak megfelelően, hogy a Munkahely minden dolgozónak egy adott összegű jutalmat ad. Minden dolgozó egyenlegét megnöveli az adott összeggel, a Munkahely egyenlegét pedig csökkenti. A procedúrának mindenképpen módosítania kell minden szükséges egyenleget, függetlenül attól, hogy mikor fordulnak elő véletlen hibák a fenti trigger miatt. Ezeket az esetlegesen felmerülő hibákat hibakezeléssel, tranzakció kezelő utasítások (COMMIT/ROLLBACK) alkalmazásával és újbóli próbálkozásokkal kell orvosolnia. A procedúra a lefutása után írja ki, hogy összesen hány UPDATE műveletet hajtott végre. (A sikeres és sikertelen műveleteket is számoljuk bele.) CREATE OR REPLACE PROCEDURE jutalom(p_osszeg number) IS Futtassuk le ciklusban 99-szer a jutalom(1)-et, majd ellenőrizzük, hogy jók-e az egyenlegek. A ciklusban való futtatás után az új egyenlegeket is el kell küldeni. (Elég az 'M' betűvel kezdődő tulajdonosok egyenlegét elküldeni, beleértve a Munkahelyet is). */