Vous êtes sur la page 1sur 10

Compte Rendu : Coupe Du Monde

Partie 1 : Question sur les procédures et procédures stockées:

--1. afficher la liste des équipes qui ont participé à la coupe mondiale

create or replace procedure p1

as

cursor curseur1 is select nomequipe from equipe ;

begin

for lequipe in curseur1 loop

exit when curseur1%notfound;

dbms_output.put_line(lequipe.nomequipe);

end loop;

end p1;

--2. afficher la liste des arbitres.

create or replace procedure p2

as

cursor curseur2 is select * from arbitre ;

begin

for larbitre in curseur2 loop

exit when curseur2%notfound;

dbms_output.put_line('Mr ' || larbitre.PRENOMARBITRE ||' ' || larbitre.NOMARBITRE || '


N°:' || larbitre.CODEARBITRE );

end loop;
end p2;

--3. afficher tous les matchs d’une équipe donnée (code equipe)

create or replace procedure p3 (V_equipe equipe.codeequipe%type)

as

cursor curseur3 (V_equipe1 equipe.codeequipe%type) is select codematch from match m

where equipe1=V_equipe or equipe2=V_equipe1;

begin

for lematch in curseur3(V_equipe) loop

exit when curseur3%notfound;

dbms_output.put_line(lematch.codematch);

end loop;

end p3;

--appel de la procedure

begin

p3('FRA');

end;

--3. afficher tous les matchs d’une équipe donnée (nom equipe)

create or replace procedure p3 (Nomequipe1 equipe.nomequipe%type)

as

cursor curseur3 (V_Nomequipe equipe.nomequipe%type) is select codematch from match

where (equipe1 in (select codeequipe from equipe where nomequipe=V_Nomequipe)

or equipe2 in (select codeequipe from equipe where nomequipe=V_Nomequipe ));

begin
for lematch in curseur3(Nomequipe1) loop

exit when curseur3%notfound;

dbms_output.put_line(lematch.codematch);

end loop;

end p3;

begin

p3('Maroc');

end;

--4. Afficher les noms des stades qui ont pu accueillir plus de spectateur.

create or replace procedure p4

as

cursor curseur4 is select distinct Nomstade, NBSPECTATEUR from stade s, match m

where s.codestade= m.stade

and m.NBSPECTATEUR >= any(select NBSPECTATEUR from match)

order by NBSPECTATEUR desc;

i int := 0;

begin

for v_stade in curseur4 loop

exit when curseur4%notfound;

--affichier les n=3 premiers stades

if(i!=3) then

dbms_output.put_line(v_stade.Nomstade);

i:=i+1;

end if;
end loop;

end p4;

--5. Afficher les noms des stades qui ont accueilli le plus de match

create or replace procedure p5

as

cursor curseur5 is select distinct Nomstade, count(codematch) nbMatch from stade s, match
m

where s.codestade= m.stade

group by Nomstade

order by nbMatch desc;

begin

for v_stade in curseur5 loop

exit when curseur5%notfound;

dbms_output.put_line(v_stade.Nomstade);

end loop;

end p5;

--5. Afficher le nom de stade qui a accueilli le plus de match

create or replace function F5 return stade.nomstade%type

is

var1 stade.nomstade%type;

begin

SELECT Nomstade into var1 FROM stade s, match m where s.codestade= m.stade group by
Nomstade

HAVING COUNT(codematch)=(SELECT MAX(count(codematch)) from match group by


stade);
return var1;

end F5;

declare

var1 stade.nomstade%type;

begin

var1 := F5;

dbms_output.put_line(var1);

end;

--6. afficher pour chaque match le nombre de places vacantes dans le stade

create or replace procedure p6

as

cursor curseur6 is select Nomstade,DATEMATCH, NBPLACES - NBSPECTATEUR


nb_place_vaccante from stade s, match m

where s.codestade= m.stade

group by Nomstade,DATEMATCH, NBPLACES, NBSPECTATEUR ;

begin

for v_stade in curseur6 loop

exit when curseur6%notfound;

dbms_output.put_line('le stade ' || v_stade.Nomstade || ' avait ' ||


v_stade.nb_place_vaccante || ' places libre le ' || v_stade.DATEMATCH);

end loop;

end p6;

--7. afficher tous les noms des joueurs marocains qui ont participé à la coupe mondiale.

create or replace procedure p7


as

cursor curseur7 is select distinct NomJoueur from equipe e, match m, joueur j

where j.codeequipe=e.codeequipe

and (e.codeequipe=m.equipe1 or e.codeequipe=m.equipe2)

nbr int;

begin

for v_joueur in curseur7 loop

exit when curseur7%notfound;

dbms_output.put_line(v_joueur.NomJoueur);

nbr := curseur7%rowcount ;

end loop;

dbms_output.put_line(nbr);

end p7;

--8. afficher les noms ordonnés des arbitres des matchs joués par une équipe donné.

create or replace procedure p8(nomequi equipe.nomequipe%type)

as

cursor curseur8 is select nomarbitre from arbitre where codearbitre in

(select arbitre from match m, equipe e where (m.equipe1 =e.codeequipe or


m.equipe2 =e.codeequipe)

and e.nomequipe=nomequi)

order by nomarbitre desc;

begin

for learbitre in curseur8 loop

exit when curseur8%notfound;


dbms_output.put_line( learbitre.NOMARBITRE );

end loop;

end P8;

partie 3 : questions sur les Triggers :

--1. Lors de l’ajout d’un joueur, on met son nom en majuscule ainsi que la première lettre
de son prénom.

CREATE OR REPLACE TRIGGER TRIG_JOUEUR_INSERT

BEFORE INSERT ON JOUEUR

FOR EACH ROW

BEGIN

:new.NOMJOUEUR := UPPER(:new.nomjoueur);

:new.prenomjoueur := initcap(:new.prenomjoueur);

END;

insert into joueur (numjoueur, nomjoueur, prenomjoueur) values (99, 'sQUalli', 'zineb');

delete from joueur where numjoueur = 99;

select * from joueur where numjoueur = 99;

desc joueur;

--2. Lors de l’ajout d’un match, on vérifie si le nombre de spectateurs est inférieur ou égal
au nombre de places disponibles dans le stade. Si oui on l’ajoute. Sinon on affiche un
message d’erreur.

CREATE OR REPLACE TRIGGER TRIG_verif_nbspectateur


BEFORE INSERT or update ON MATCH

FOR EACH ROW

declare

nb number ;

BEGIN

select NBPLACES into nb from stade where CODESTADE=:new.stade;

IF :new.NBSPECTATEUR > nb then

DBMS_OUTPUT.PUT_LINE('Attention !! ');

RAISE_application_error(-20005,'le stade ne peut pas acceuillir plus que '|| nb || '


spectateurs');

END IF;

END;

--3. Lors de l’insertion d’un but, on vérifie le joueur s'il a participé au match.

CREATE OR REPLACE TRIGGER TRIG_verif_joueur

BEFORE INSERT ON BUT

FOR EACH ROW

declare

eq1 VARCHAR2(3) ;

eq2 VARCHAR2(3) ;

eqj VARCHAR2(3) ;

BEGIN

select equipe1, equipe2 into eq1, eq2 from equipe e, match m where
e.CODEEQUIPE=m.EQUIPE1 and codematch=:new.codematch;

select CODEEQUIPE into eqj from joueur where numjoueur= :new.numjoueur;


IF (eqj!=eq1 and eqj!=eq2) then

DBMS_OUTPUT.PUT_LINE('Attention !! ');

RAISE_application_error(-20005,'le joueur ne participe pas dans le match selectionné ');

END IF;

END;

--4. Lors de l’insertion d’un but, on vérifie si la minute est positive.

CREATE OR REPLACE TRIGGER TRIG_verif_minute

BEFORE INSERT OR UPDATE ON BUT

FOR EACH ROW

BEGIN

IF :new.MINUTEBUT < 0 then

DBMS_OUTPUT.PUT_LINE('Attention !! ');

RAISE_application_error(-20006,'la minute du but ne peut pas etre negative !!!');

END IF;

END;

--5. Interdire de modifier la date de match.

CREATE OR REPLACE TRIGGER TRIG_inter_date

before update of DATEMATCH ON match

for each row

BEGIN

if updating('DATEMATCH') then

RAISE_application_error(-20007,'impossible de modifier la date d''un match !!!');

end if;

END;

--6. Lors de la suppression d’un joueur, en supprime aussi les buts qu’il a marqués.
CREATE OR REPLACE TRIGGER TRIG_sup_joueur

before delete ON Joueur

for each row

BEGIN

Delete from but where NUMJOUEUR=:old.NUMJOUEUR;

END;

--7. Lors de la suppression d’un match, en supprime les buts.

CREATE OR REPLACE TRIGGER TRIG_sup_match

before delete ON match

for each row

BEGIN

delete from but where codematch=:old.codematch;

END;

--8. Lors de la suppression d’une équipe, on supprime les joueurs, on supprrime le match .

CREATE OR REPLACE TRIGGER TRIG_sup_equi

before delete ON equipe

for each row

BEGIN

Delete from match where equipe1=:old.CODEEQUIPE or equipe2=:old.CODEEQUIPE;

Delete from joueur where CODEEQUIPE=:old.CODEEQUIPE;

END;

Vous aimerez peut-être aussi