create or replace
PACKAGE VOETBAL_PKG_2008 AS
e_does_not_exist exception;
pragma exception_init(e_does_not_exist, -2291);
TYPE type_rec_ploeg IS RECORD (naam ploeg.naam%type, aantal_wedstrijden ploeg.aantal_wedstrijden%type, gewonnen ploeg.gewonnen%type,
verloren ploeg.verloren%type, gelijkgespeeld ploeg.gelijkgespeeld%type, score_voor ploeg.score_voor%type,
score_tegen ploeg.score_tegen%type, punten number(5));
TYPE type_tab_ploeg IS TABLE OF type_rec_ploeg INDEX BY pls_integer;
t_ploeg type_tab_ploeg;
PROCEDURE KLASSEMENT(p_afdeling IN ploeg.afdeling%type);
PROCEDURE OVERZICHT_SPELERS_PLOEG(p_ploeg in speler.ploeg%type);
PROCEDURE PLOEGOPSTELLINGWEDSTRIJD (p_wedstrijd in selectie.wedstrijd%type);
PROCEDURE VOEG_SPELER_TOE(p_bondnr in number, p_familienaam in varchar2, p_voornaam in varchar2, p_straat in varchar2, p_huisnr in varchar2, p_postcode in number, p_gemeente in varchar2, p_telefoon in varchar2, p_gebdat in date, p_type in varchar2, p_ploeg in varchar2);
PROCEDURE TOPSCOORDERS (p_afdeling in varchar2);
PROCEDURE SPEELDAG_KALENDER (p_afdeling in afdeling.rang%type, p_speeldag in wedstrijd.speeldag%type);
PROCEDURE KLASSEMENT_CURSOR (p_afdeling IN ploeg.afdeling%type);
PROCEDURE MEESTE_SELECTIES;
END VOETBAL_PKG_2008;
create or replace
PACKAGE BODY VOETBAL_PKG_2008 AS
PROCEDURE KLASSEMENT (p_afdeling IN ploeg.afdeling%type) IS
BEGIN
select naam, aantal_wedstrijden, gewonnen, verloren, gelijkgespeeld, score_voor, score_tegen, gewonnen * 3 + gelijkgespeeld punten BULK COLLECT INTO t_ploeg
from ploeg
where p_afdeling = afdeling
order by 8 desc;
FOR i IN 1.. t_ploeg.count
LOOP
dbms_output.put_line(t_ploeg(i).naam || ' ' || t_ploeg(i).aantal_wedstrijden || ' ' || t_ploeg(i).gewonnen || ' ' || t_ploeg(i).gelijkgespeeld|| ' ' || t_ploeg(i).verloren || ' ' || t_ploeg(i).punten);
END LOOP;
END klassement;
PROCEDURE OVERZICHT_SPELERS_PLOEG(p_ploeg in speler.ploeg%type)
IS
TYPE type_rec_spelers IS RECORD (familienaam speler.familienaam%type, voornaam speler.voornaam%type, speler_type speler.type%type);
TYPE type_tab_spelers IS TABLE OF type_rec_spelers INDEX BY pls_integer;
t_spelers type_tab_spelers;
BEGIN
select familienaam, voornaam, type BULK COLLECT INTO t_spelers
from speler s
where ploeg = p_ploeg order by type;
FOR i IN 1 .. t_spelers.count
LOOP
dbms_output.put_line(t_spelers(i).familienaam || ' ' || t_spelers(i).voornaam || ' ' || t_spelers(i).speler_type);
END LOOP;
END overzicht_spelers_ploeg;
PROCEDURE PLOEGOPSTELLINGWEDSTRIJD (p_wedstrijd in selectie.wedstrijd%type)
IS
TYPE type_rec_spelers IS RECORD (familienaam speler.familienaam%type, voornaam speler.voornaam%type, speler2 selectie.speler%type, positie selectie.positie%type, ploeg speler.ploeg%type);
TYPE type_tab_spelers IS TABLE OF type_rec_spelers INDEX BY pls_integer;
TYPE type_tab_ploegen IS TABLE OF number(4) INDEX BY pls_integer;
t_spelers type_tab_spelers;
t_ploegen type_tab_ploegen;
BEGIN
select sp.familienaam, sp.voornaam, se.speler, se.positie, sp.ploeg BULK COLLECT INTO t_spelers
from selectie se, speler sp where se.wedstrijd = p_wedstrijd and se.speler = sp.bondnr;
select sp.ploeg BULK COLLECT INTO t_ploegen
from selectie se, speler sp where se.wedstrijd = p_wedstrijd and se.speler = sp.bondnr
group by sp.ploeg;
FOR v_teller1 IN 1 .. 2
LOOP
dbms_output.put_line('Ploeg ' || v_teller1 || ': ');
FOR v_teller2 IN 1 .. t_spelers.count
LOOP
IF t_spelers(v_teller2).ploeg = t_ploegen(v_teller1)
THEN
dbms_output.put_line(t_spelers(v_teller2).familienaam || ' ' || t_spelers(v_teller2).voornaam || ': ' || t_spelers(v_teller2).positie);
END IF;
END LOOP;
END LOOP;
END ploegopstellingwedstrijd;
PROCEDURE VOEG_SPELER_TOE(p_bondnr in number, p_familienaam in varchar2, p_voornaam in varchar2, p_straat in varchar2, p_huisnr in varchar2, p_postcode in number, p_gemeente in varchar2, p_telefoon in varchar2, p_gebdat in date, p_type in varchar2, p_ploeg in varchar2)
IS
e_type exception;
e_ploeg exception;
e_naam exception;
pragma exception_init(e_type, -2290);
BEGIN
if p_familienaam is null or length(p_familienaam) = 0 then
raise e_naam;
end if;
insert into speler (bondnr, familienaam, voornaam, straat, huisnr, postcode, gemeente, telefoon, gebdat, type, ploeg)
values (p_bondnr, p_familienaam, p_voornaam, p_straat, p_huisnr, p_postcode, p_gemeente, p_telefoon, p_gebdat, p_type, p_ploeg);
EXCEPTION
when dup_val_on_index then
dbms_output.put_line('Bondnr reeds in gebruik!');
when e_naam then
dbms_output.put_line('Naam mag niet leeg zijn!');
when e_type then
dbms_output.put_line('Het type speler is niet geldig!');
when e_does_not_exist then
dbms_output.put_line('Ploeg bestaat niet!');
END VOEG_SPELER_TOE;
PROCEDURE LOG_ERROR(p_tekst in varchar2)
IS
pragma autonomous_transaction;
begin
insert into log_tabel (tijd, gebruiker, event) values (sysdate, user, p_tekst);
commit;
END;
PROCEDURE TOPSCOORDERS (p_afdeling in varchar2) IS
cursor c_topscoorders is
select s.voornaam, s.familienaam, s.gebdat, count(*) score
from speler s, doelpunt d, wedstrijd w
where s.bondnr = d.speler and d.wedstrijd = w.nummer and w.afdeling = p_afdeling
group by s.voornaam, s.familienaam, s.gebdat
order by score desc;
r_topscoorder c_topscoorders%rowtype;
v_vorige_score NUMBER := 0;
BEGIN
open c_topscoorders;
fetch c_topscoorders into r_topscoorder;
while c_topscoorders%found and (c_topscoorders%rowcount <= 3 or r_topscoorder.score = v_vorige_score)
loop
dbms_output.put_line(r_topscoorder.voornaam || ' ' || r_topscoorder.familienaam || ' ' || r_topscoorder.score);
v_vorige_score := r_topscoorder.score;
fetch c_topscoorders into r_topscoorder;
end loop;
close c_topscoorders;
END TOPSCOORDERS;
PROCEDURE SPEELDAG_KALENDER (p_afdeling in afdeling.rang%type, p_speeldag in wedstrijd.speeldag%type) IS
cursor c_wedstrijden is
select tp.naam thuisploeg, bp.naam bezoekers, score_thuisploeg, score_bezoekers
from wedstrijd w, ploeg tp, ploeg bp
where speeldag = p_speeldag and w.afdeling = p_afdeling and tp.stamnr = w.thuisploeg and bp.stamnr = w.bezoekers;
BEGIN
for r_wedstrijd in c_wedstrijden
loop
dbms_output.put_line(r_wedstrijd.thuisploeg || ' - ' || r_wedstrijd.bezoekers || ': ' || r_wedstrijd.score_thuisploeg
|| ' - ' || r_wedstrijd.score_bezoekers);
end loop;
END SPEELDAG_KALENDER;
PROCEDURE KLASSEMENT_CURSOR (p_afdeling IN ploeg.afdeling%type) IS
cursor c_ploegen is
select naam, aantal_wedstrijden, gewonnen, verloren, gelijkgespeeld, score_voor, score_tegen, gewonnen * 3 + gelijkgespeeld punten
from ploeg
where p_afdeling = afdeling
order by 8 desc;
BEGIN
FOR r_ploeg IN c_ploegen
LOOP
dbms_output.put_line(r_ploeg.naam || ' ' || r_ploeg.aantal_wedstrijden || ' ' || r_ploeg.gewonnen || ' '
|| r_ploeg.gelijkgespeeld|| ' ' || r_ploeg.verloren || ' ' || r_ploeg.punten);
END LOOP;
END klassement_cursor;
PROCEDURE MEESTE_SELECTIES
IS
cursor c_spelers is
select sp.familienaam, sp.voornaam, count(*) selecties
from speler sp, selectie se
where se.speler = sp.bondnr
group by sp.familienaam, sp.voornaam
order by 3 desc;
v_hoogste NUMBER := 0;
r_speler c_spelers%rowtype;
BEGIN
open c_spelers;
fetch c_spelers into r_speler;
while c_spelers%found
loop
if v_hoogste <= r_speler.selecties then
v_hoogste := r_speler.selecties;
dbms_output.put_line(r_speler.familienaam || ' ' || r_speler.voornaam || ' ' || r_speler.selecties);
end if;
fetch c_spelers into r_speler;
end loop;
close c_spelers;
END MEESTE_SELECTIES;
END VOETBAL_PKG_2008;