All pastes #930257 Raw Edit

Package en Package Body

public text v1 · immutable
·published 2008-03-06 12:41 UTC
rendered paste body
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;