create table Naplo(idopont date, esemeny char(200), adat char(200)); create table Sofor(id char(5) primary key, nev char(20), ber number(6), munkaora number(2)); create table Jarat( id char(5) primary key, sofor char(5), idotartam number(2), foreign key (sofor) references Sofor(id)); create table Utas( id char(5)primary key, nev char(20), jarat char(5) not null, kor number(2), foreign key(Jarat) references Jarat(id)); Create table Ellenor( id char(5) primary key, nev char(20), buntetes number(2)); Begin Insert into Sofor values('ujd12', 'Kiss Bela', 125632, 8); Insert into Sofor values('784fs', 'NagyBela', 125632, 12); Insert into Sofor values('df45e', 'Ferde Geza', 125632, 7); Insert into Sofor values('u78ds', 'Bodon Bela', 125632, 12); Insert into Sofor values('qwesd', 'János Mária', 125632, 4); Insert into Sofor values('lwer7', 'Uti Jolán', 125632, 0); Insert into Sofor values('lkkks', 'Kovács Vanessza', 125632, 96); Insert into Sofor values('mmmxn', 'Bude Csilla', 125632, 56); Insert into Sofor values('uplld', 'Orok Ferenc', 125632, 81); Insert into Sofor values('784lk', 'Sasik Szabolcs', 125632, 18); end; Begin insert into jarat values('jeres','784fs',14); insert into jarat values('oksld','mmmxn',10); insert into jarat values('p784d','784lk',16); insert into jarat values('jfsls','784fs',17); insert into jarat values('745sf','lwer7',14); insert into jarat values('assde','df45e',13); insert into jarat values('784ds','lkkks',25); insert into jarat values('45ds4','784fs',30); insert into jarat values('741sd','df45e',24); insert into jarat values('jkls7','784fs',27); end; Begin insert into utas values('15236','Karoly Karolina','jeres',12); insert into utas values('15fd4','Karoly Erika','745sf',18); insert into utas values('cd45e','Nagy Zsofia','assde',19); insert into utas values('1asd4','Kerekes Judit','741sd',42); insert into utas values('78cde','Serki Peter','oksld',87); insert into utas values('1ler4','Pal Geza','741sd',41); insert into utas values('1asw4','Veres Peter','741sd',63); insert into utas values('cd86e','Cisce Csilla','jeres',12); insert into utas values('ssas7','Inve Ivett','oksld',14); insert into utas values('fse48','Deres Dora','741sd',18); end; Begin insert into ellenor values('12578','Nagy Tamara',2); insert into ellenor values('dse45','Herman Hanna ',10); insert into ellenor values('12548','Kiss Emma',8); insert into ellenor values('kloe4','Dolog Ádám',0); insert into ellenor values('412sf','Zoe Zalan',4); insert into ellenor values('vde4d','Nagy Milan',7); insert into ellenor values('cc4cc','Sers Csilla',12); insert into ellenor values('sdf74','Csovek Florian',41); insert into ellenor values('445fs','Neres Nora',47); insert into ellenor values('elofs','Nagy Istvan',24); End; 1) paraméterben adott adatok felvitele az Ellenor táblába create or replace procedure felvisz1(ujid in char, ujnev in char, ujbuntetes in number) is Begin insert into Ellenor values(ujid, ujnev, ujbuntetes); End; 2)Paraméterként megadott adatok felvitele a Sofor táblába create or replace procedure felvisz2(ujid in char, ujnev in char, ujber in number, ujmunkaora in number) is Begin insert into Sofor values(ujid, ujnev, ujber, ujmunkaora); End; 3) Sofor tábla módoítása. Ha az azonosító megegyezik a paraméterben adottal, akkor 10%-al növeli a bért create or replace procedure modosit1(ujid in char) is Begin update Sofor set ber=ber*1.1 where id=ujid; End; 4) Minden ellenőr általi büntetések számát lenulláz create or replace procedure modosit2 is Begin update Ellenor set buntetes=0; End; 5)15-nél fiatalabb utasok törlése. create or replace procedure torol1 is Begin delete utas where kor <15; End; 6) Ahol az időtartam több, mint a paraméterben adott, azt törölje a Jarat táblából. create or replace procedure torol2 (ujidotartam in number) is Begin delete Jarat where idotartam>ujidotartam; end; 7)A Sofor elemeinek a számával tér vissza a fv. create or replace function kikereso1 return number as db number:=0; begin select count(*) into db from Sofor; return db; end; 8)A munkaórák számával tér vissza a fv. create or replace function kikereso2 return number as dbora number:=0; begin select count(munkaora) into dbora from Sofor; return dbora; end; 9)Az átlag büntetésszámmal tév vissza a tárolt fv. create or replace function kikereso3 return number as atlag number:=0; begin select avg(buntetes) into atlag from Ellenor; return atlag; end; 10) Az 5-nél töb munkaórájúak kilistázása a Sofor táblából create or replace procedure kurzor1 is cursor c is select *from Sofor where munkaora >5; i c%ROWTYPE; BEGIN open c; LOOP FETCH c into i; EXIT WHEN c%NOTFOUND; dbms_output.put_line('Otnel tobb munkaora '||i.munkaora||' id-je '||i.id); END LOOP; CLOSE c; END; 11)Ahol a kor kisebb mint 18, ott legyen 18 a kor az utas táblában. create or replace procedure kurzor2 is CURSOR c IS SELECT * FROM Utas WHERE kor<18 for update ; i c%ROWTYPE; BEGIN OPEN c; LOOP FETCH c into i; EXIT WHEN c%NOTFOUND; UPDATE Utas SET kor=18 WHERE CURRENT OF c; END LOOP; CLOSE c; End; 12)Ahol a kor a paraméterben adottal egyezik, akkor törölje ki, ha nincs ilyen, akkor írjon hibát create or replace procedure kiv1( ujkor in number) as db number; sajat exception; begin select count(*) into db from Utas where kor=ujkor; if db=0 then raise sajat; else delete from Utas where kor=ujkor; end if; exception when sajat then dbms_output.put_line('Nem tudunk torolni, nincs ilyen'); end; 13)Ha a kor nagyobb mint a paraméterben lévő érték, akkor írja ki. Ha több ilyen van, akkor naplózza a hibát. create or replace procedure kiv2(x in number) as s Sofor%rowtype; begin select * into s from Utas where kor > x; dbms_output.put_line('Idos utas id '|| s.id); exception when too_many_rows then insert into naplo values( sysdate,'Sok az adat!', user); end; 14)A paraméterben kapott id-el egyező járat idejét írja ki, ha több ilyen van, vagy nincs ilyen akkor írjon hibát create or replace procedure kiv3 (jid in char) is x number(2); BEGIN select idotartam into x from Jarat where id=jid; dbms_output.put_line('Jaratido '||x||' Jaratid: '||jid); exception when no_data_found then dbms_output.put_line('Nem letezo jarat: '); insert into naplo values( sysdate,'Nem letezo jarat', user); when too_many_rows then dbms_output.put_line('Több ilyen nevű jaratletezik: '); insert into naplo values( sysdate,'Tobb jarat is van ilyen', user); end; begin kiv3('asdf1'); end; 14)Ha törlünk az utas táblából, akkor naplózzuk. create or replace trigger t1 after delete on Utas for each row begin insert into Naplo values(sysdate,'Törlés az utas táblából', :old.id); end; delete from utas where kor <28; 15) Ha beszúrunk az utas táblába, akkor naplózzuk. create or replace trigger t2 after insert on Utas for each row begin insert into Naplo values(sysdate,'Beszúrás', :new.nev); end; Insert into Utas values('125sd', 'Nagy Viloa', 'jeres',19); 16)Ha módosítunk az Ellenőr táblában, akkor naplózzuk. create or replace trigger t3 after update on Ellenor for each row begin IF :old.id != :new.id THEN insert into Naplo values(sysdate,'Módosítás', :new.id); END IF; IF :old.nev != :new.nev THEN insert into Naplo values(sysdate,'Módosítás', :new.nev); END IF; IF :old.buntetes != :new.buntetes THEN insert into Naplo values(sysdate,'Módosítás', :new.buntetes); END IF; end; update Ellenor set nev='xyz' where buntetes>4; 17)Ha módosítunk a Sofor táblában a béren, akkor ha a régi bér háromszorosánál nagyobbra szeretnénk, vagy a régi bér felénél kisebbre, akkor ne engedje, és naplózza. create or replace trigger t4 before update of ber on Sofor for each row begin if :new.ber > (:old.ber*3) then dbms_output.put_line('Túl sok fizetésemelés. Régi bér'||:old.ber||'Új bére lenne'||:new.ber); :new.ber := :old.ber; end if; if :new.ber < (:old.ber*0.5) then dbms_output.put_line('Túl kevés fizetés. Régi bére'||:old.ber||'Új bére lenne'||:new.ber); :new.ber := :old.ber; end if; end; update Sofor set ber=ber*5 where ber>125478; create or replace package csomag1 as procedure kiv3 (jid in char); procedure torol2 (ujidotartam in number); end csomag1; create or replace package body csomag1 as procedure kiv3 (jid in char) is x number(2); BEGIN select idotartam into x from Jarat where id=jid; dbms_output.put_line('Jaratido '||x||' Jaratid: '||jid); exception when no_data_found then dbms_output.put_line('Nem letezo jarat: '); insert into naplo values( sysdate,'Nem letezo jarat', user); when too_many_rows then dbms_output.put_line('Több ilyen nevű jaratletezik: '); insert into naplo values( sysdate,'Tobb jarat is van ilyen', user); end; procedure torol2 (ujidotartam in number) is Begin delete Jarat where idotartam>ujidotartam; end; end csomag1; begin csomag1.kiv3('des45'); end; begin csomag1.torol2(27); end; create or replace package csomag2 as procedure felvisz1(ujid in char, ujnev in char, ujbuntetes in number); procedure modosit2; function kikereso3 return number; end csomag2; create or replace package body csomag2 as procedure felvisz1(ujid in char, ujnev in char, ujbuntetes in number) is Begin insert into Ellenor values(ujid, ujnev, ujbuntetes); End; procedure modosit2 is Begin update Ellenor set buntetes=0; End; function kikereso3 return number as atlag number:=0; begin select avg(buntetes) into atlag from Ellenor; return atlag; end; end csomag2; begin csomag2.felvisz1('de12', 'Pentek Geza', 12); end; begin csomag2.modosit2; end; Select csomag2.kikereso3 from dual; create or replace package csomag3 as procedure felvisz2(ujid in char, ujnev in char, ujber in number, ujmunkaora in number); procedure modosit1(ujid in char); function kikereso1 return number; function kikereso2 return number; end csomag3; create or replace package body csomag3 as procedure felvisz2(ujid in char, ujnev in char, ujber in number, ujmunkaora in number) is Begin insert into Sofor values(ujid, ujnev, ujber, ujmunkaora); End; procedure modosit1(ujid in char) is Begin update Sofor set ber=ber*1.1 where id=ujid; End; function kikereso1 return number as db number:=0; begin select count(*) into db from Sofor; return db; end; function kikereso2 return number as dbora number:=0; begin select count(munkaora) into dbora from Sofor; return dbora; end; end csomag3; begin csomag3.felvisz2('asd45','Dorda Attila',12547,12); end; begin csomag3.modosit1('mmmxn'); end; select csomag3.kikereso1 from dual; select csomag3.kikereso2 from dual; create or replace package csomag4 as procedure torol1; procedure kurzor2; procedure kiv1( ujkor in number); procedure kiv2(x in number); procedure kurzor1; end csomag4; create or replace package body csomag4 as procedure torol1 is Begin delete utas where kor <15; End; procedure kurzor2 is CURSOR c IS SELECT * FROM Utas WHERE kor<18 for update ; i c%ROWTYPE; BEGIN OPEN c; LOOP FETCH c into i; EXIT WHEN c%NOTFOUND; UPDATE Utas SET kor=18 WHERE CURRENT OF c; END LOOP; CLOSE c; End; procedure kiv1( ujkor in number) as db number; sajat exception; begin select count(*) into db from Utas where kor=ujkor; if db=0 then raise sajat; else delete from Utas where kor=ujkor; end if; exception when sajat then dbms_output.put_line('Nem tudunk torolni, nincs ilyen'); end; procedure kiv2(x in number) as s Sofor%rowtype; begin select * into s from Utas where kor > x; dbms_output.put_line('Idos utas id '|| s.id); exception when too_many_rows then insert into naplo values( sysdate,'Sok az adat!', user); end; procedure kurzor1 is cursor c is select *from Sofor where munkaora >5; i c%ROWTYPE; BEGIN open c; LOOP FETCH c into i; EXIT WHEN c%NOTFOUND; dbms_output.put_line('Otnel tobb munkaora '||i.munkaora||' id-je '||i.id); END LOOP; CLOSE c; END; end csomag4; begin csomag4.torol1; end; begin csomag4.kurzor2; end; begin csomag4.kiv1(15); end; begin csomag4.kiv2(10); end; begin csomag4.kurzor1; end; drop package csomag1; drop package csomag2; drop package csomag3; drop package csomag4; drop trigger t1; drop trigger t2; drop trigger t3; drop procedure felvisz1; drop procedure felvisz2; drop procedure modosit1; drop procedure modosit2; drop procedure torol1; drop procedure torol2; drop function kikereso1; drop function kikereso2; drop function kikereso3; drop procedure kurzor1; drop procedure kurzor2; drop procedure kiv1; drop procedure kiv2; drop procedure kiv3; drop table utas; drop table jarat; drop table sofor; drop table ellenor; drop table naplo;