diff --git a/EXOS/Exam2020-all.tex b/EXOS/Exam2020-all.tex index ad31d6e..fbbcbc7 100644 --- a/EXOS/Exam2020-all.tex +++ b/EXOS/Exam2020-all.tex @@ -522,6 +522,8 @@ Messages à prévoir : \item Le libellé doit être unique \item L’équipement a été enregistré : Libellé \end{itemize} + +% \lstinputlisting{exo1-FG.sql} \end{exercice} \begin{exercice}[PL1] (10 points) @@ -534,6 +536,8 @@ Messages à prévoir : \item L'heure de d\'ebut est d\'ej\`a attribu\'ee \item L'heure de d\'ebut doit \^etre comprise entre 9h et 17h \end{itemize} + +% \lstinputlisting{exo1-PL.sql} \end{exercice} \begin{exercice}[MF2] (15 points) @@ -588,6 +592,8 @@ Messages à prévoir : \item Des réservations en cours ou à venir utilisent cet équipement \item nb réservations passées ont été supprimées \end{itemize} + +%\lstinputlisting{exo2-PL.sql} \end{exercice} \begin{exercice}[MF3] (20 points) @@ -618,7 +624,7 @@ Nombre de réservations total pour ce sport : nb %\end{small} % } - + \lstinputlisting{exo3-MF.sql} \end{exercice} @@ -648,7 +654,7 @@ Nombre de réservations sans équipement : nb %\end{small} % } - +% \lstinputlisting{exo3-PB.sql} \end{exercice} @@ -704,6 +710,8 @@ Nombre de joueurs à prévenir : nb \fbox{ \BUseVerbatim{AffichagePL}} \end{center} +%\lstinputlisting{exo3-PL.sql} + \end{exercice} @@ -726,6 +734,8 @@ Id. réserv: XXXXX heure début : X durée : X tarif horaire : 99 Coût terr \end{small} } \end{center} + +% \lstinputlisting{exo4-MF.sql} \end{exercice} \begin{exercice}[PB4] (20 points) @@ -748,6 +758,8 @@ Nombre de joueur moyen par réservation : 999 \end{small} } \end{center} + +%\lstinputlisting{exo4-PB.sql} \end{exercice} \begin{exercice}[FG4] (20 points) @@ -790,6 +802,7 @@ NumCreneau: XXXXX heure début : X Benefice :9999€ nb joueurs : 9999 \end{small} } \end{center} +%\lstinputlisting{exo4-PL.sql} \end{exercice} diff --git a/EXOS/exo1-MF.sql b/EXOS/exo1-MF.sql new file mode 100644 index 0000000..6885789 --- /dev/null +++ b/EXOS/exo1-MF.sql @@ -0,0 +1,55 @@ +drop table tresultat purge; +create table tresultat(ligne varchar2(200)); + +variable vnomsport varchar2(10) +prompt nom du sport? +accept vnomsport +variable vnbMinJoueurs number +prompt nombre minimum? +accept vnbMinJoueurs +variable vnbMaxJoueurs number +prompt nombre maximum? +accept vnbMaxJoueurs +variable vduree number +prompt duree? +accept vduree + +declare +dnomSport varchar2(10):='&vnomsport'; +dnbMinJoueurs number:='&vnbMinJoueurs'; +dnbMaxJoueurs number:='&vnbMaxJoueurs'; +dduree number:='&vduree'; +dmessage varchar2(200); +probleme exception; +dcpt number; + +begin + + dmessage:='ERREUR: nom du sport déjà attribué'; + select count(*) into dcpt + from sport + where nomSport=dnomSport; + if dcpt=1 + then insert into tresultat values (dmessage); + else dmessage:='Le nombre maximum de joueurs doit être supérieur au nombre minimum'; + if dnbMaxJoueurs < dnbMinJoueurs + then raise probleme; + else dmessage:='La durée est de 1h ou 2h'; + if dduree =1 or dduree =2 + then + insert into sport values(dnomSport, dnbMinJoueurs, dnbMaxJoueurs, dduree); + commit; + insert into tresultat values ('Le sport a été enregistré :'|| dnomSport); + else raise probleme; + end if; + end if; + end if; + exception + when probleme then insert into tresultat values (dmessage); +end; +. +/ +select * from tresultat; + + + diff --git a/EXOS/exo1-PB.sql b/EXOS/exo1-PB.sql new file mode 100644 index 0000000..5d2ed28 --- /dev/null +++ b/EXOS/exo1-PB.sql @@ -0,0 +1,68 @@ +drop table tresultat purge; +create table tresultat(ligne varchar2(200)); + +variable vidReserv char(3) +prompt id Reservation? +accept vidReserv +variable vdateReserv char(9) +prompt date reservation? +accept vdateReserv +variable vnbJoueurs number +prompt nombre joueurs? +accept vnbJoueurs +variable vidTerrain char(5) +prompt id Terrain? +accept vidTerrain +variable vnumCreneau char(2) +prompt num Creneau? +accept vnumCreneau + +declare +didReserv char(3):='&vidReserv'; +ddateReserv date:=to_date('&vdateReserv', 'dd-mon-yy'); +dnbJoueurs number:=&vnbJoueurs; +didTerrain char(5):='&vidTerrain'; +dnumCreneau char(2):='&vnumCreneau'; + +dmessage varchar2(200); +probleme exception; +dcpt number; + +begin + + dmessage:='ERREUR: id réservation déjà attribué'; + select count(*) into dcpt + from reservation + where idReserv=didReserv; + if dcpt=1 + then insert into tresultat values (dmessage); + else dmessage:='La date de réservation doit être postérieure à la date du jour'; + if ddateReserv < sysdate + then raise probleme; + else dmessage:='l''identifiant du terrain est inconnu'; + select count(*) into dcpt + from terrain + where idTerrain=didTerrain; + id dcpt=0 then raise probleme; + else + dmessage:='l''identifiant du créneau est inconnu'; + select count(*) into dcpt + from creneau + where numCreneau=dnumCreneau; + id dcpt=0 then raise probleme; + else + insert into reservation values(didReserv, ddateReserv, dnbJoueurs, didTerrain, dnumCreneau); + commit; + insert into tresultat values ('La réservation a été enregistrée :'); + end if; + end if; + end if; + exception + when probleme then insert into tresultat values (dmessage); +end; +. +/ +select * from tresultat; + + + diff --git a/EXOS/exo2-MF.sql b/EXOS/exo2-MF.sql new file mode 100644 index 0000000..13ef888 --- /dev/null +++ b/EXOS/exo2-MF.sql @@ -0,0 +1,57 @@ +drop table tresultat purge; +create table tresultat(ligne varchar2(200)); + +variable vidJoueur char(2); +prompt id joueur? +accept vidJoueur + +declare +didJoueur char(2):='&vidJoueur'; +didReserv char(3); +ddateReserv date; +dmessage varchar2(200); +inexistant exception; +probleme exception; +dcpt number; +dcptReserv number; +begin + + dmessage:='joueur inconnu'; + select count(*) into dcpt + from joueur + where idJoueur=didJoueur; + if dcpt=0 + then raise inexistant; + else select count(*) into dcptReserv + from faire F, reservation R + where F.idReserv=R.idReserv + and F.idJoueur=didJoueur + and R.dateReserv >= sysdate; + dmessage:='Impossible, il existe des réservations faites par ce joueur pour aujourd''hui ou dans le futur'; + if dcptReserv>0 + then raise probleme; + else select count(*) into dcptReserv + from faire F, reservation R + where F.idReserv=R.idReserv + and F.idJoueur=didJoueur + and R.dateReserv < sysdate; + if dcptReserv>0 + then delete from faire + where idJoueur=didJoueur; + insert into tresultat values(to_char(dcptReserv)||' action(s) de réservations faites dans le passé par ce joueur ont été supprimées'); + end if; + delete from joueur where idJoueur=didJoueur; + insert into tresultat values('joueur supprimé'); + commit; + end if; + end if; + exception + when inexistant then insert into tresultat values (dmessage); + when probleme then insert into tresultat values (dmessage); +end; +. +/ +select * from tresultat; + + + diff --git a/EXOS/exo2-PB.sql b/EXOS/exo2-PB.sql new file mode 100644 index 0000000..1f6b2c7 --- /dev/null +++ b/EXOS/exo2-PB.sql @@ -0,0 +1,39 @@ + +declare +didEquip char(2):='&vidEquip'; +didReserv char(3); +dmessage varchar2(200); +inexistant exception; +dcpt number; +dcptReserv number; +cursor R is select idReservation from reservation R, contenir C where R.idReservation=C.idReservation +and dateReserv>='01-mar-21' and dateReserv<='31-mar-21' and C.idEquipement=didEquip; +begin + + dmessage:='l''identifiant de l''equipement est inconnu'; + select count(*) into dcpt + from equipement + where idEquipement=didEquip; + if dcpt=0 + then raise inexistant; + + else dcptReserv:=0; + open R; + fetch R into didReservation; + while R%found + loop + delete from contenir + where idReservation=didReservation; + delete from faire + where idReservation = didReservation; + delete from reservation where idReservation= didReservation; + dcptReserv:=dcptReserv+1; + fetch R into didReservation; + end loop; + close R; + insert into tresultat values(to_char(dcptReserv)||' réservations ont été supprimées'); + commit; + end if; + exception + when inexistant then insert into tresultat values (dmessage); +end; diff --git a/EXOS/exo3-MF.sql b/EXOS/exo3-MF.sql new file mode 100644 index 0000000..2afb347 --- /dev/null +++ b/EXOS/exo3-MF.sql @@ -0,0 +1,60 @@ +drop table tresultat purge; +create table tresultat(ligne varchar2(200)); +variable vnomsport varchar2(10) +prompt nom du sport? +accept vnomsport + +declare +dnomSport varchar2(10):='&vnomsport'; +didReserv char(3); +ddateReserv date; +dheureDebut number; +dnumCreneau char(2); +dancienheureDebut char(3); +dmessage varchar2(200); +inexistant exception; +probleme exception; +dcpt number; +dnb number:=0; +cursor CUR is select C.numCreneau, heureDebut, idReserv, dateReserv + from creneau C, reservation R, terrain T, sport S + where S.nomSport = dnomSport + and S.nomSport=T.nomSport + and T.idTerrain=R.idTerrain + and R.numCreneau=C.numCreneau + order by 2,4; +begin + dmessage:='nom du sport inexistant'; + select count(*) into dcpt + from sport + where nomSport=dnomSport; + if dcpt=0 + then raise inexistant; + else + open CUR; + fetch cur into dnumCreneau,dheureDebut, didReserv, ddateReserv; + + while cur%FOUND + loop + insert into tresultat values('Numero creneau:'||dnumCreneau||' heure de début:'||to_char(dheureDebut)); + dancienheureDebut:=dheureDebut; + while dancienheureDebut=dheureDebut and cur%FOUND + loop + insert into tresultat values (didReserv||' date:'||ddateReserv); + dnb:=dnb+1; + fetch cur into dnumCreneau, dheureDebut, didReserv, ddateReserv; + end loop; + end loop; + close CUR; + insert into tresultat values ('Nombre de réservations total pour ce sport : '||to_char(dnb)); + end if; + exception + when inexistant then insert into tresultat values (dmessage); + when probleme then insert into tresultat values (dmessage); +end; +. +/ +select * from tresultat; + + +