diff --git a/EXOS/Partiel2020.tex b/EXOS/Partiel2020.tex index 8274335..58c7b2d 100644 --- a/EXOS/Partiel2020.tex +++ b/EXOS/Partiel2020.tex @@ -332,13 +332,111 @@ Date\_creation\\ \end{tikzpicture} \end{center} - \newpage + + -\begin{exercice}[NBA, PLSQL] (45 points) +\begin{exercice}[NBA, PLSQL] (60 points) Le MLD ci-dessus stocke les donn\'ees des matchs NBA. \begin{enumerate} +\item (20 points) Lister dans une table \code{TLIGNES} tous les + joueurs d'un \'equipe donn\'ee par l'utilisateur et d'une ann\'ee, + afficher leur nom, pr\'enom, poste et le nombres de match o\`u il a + fait 0, 1, 2, 3, 4 ou 5 fautes, durant cette ann\'ee civile : +\begin{center} + \begin{small} +\begin{verbatim} + EQUIPE XXX + Nom Prenom Poste + XXXXXX XXXXXXX XXXXXX + Fautes Nb Matchs + 0 YYY + 1 YYY + 2 YYY + 3 YYY + 4 YYY + 5 YYY + + XXXXXX XXXXXXX XXXXXX + Fautes Nb Matchs + 0 YYY + 1 YYY + 2 YYY + 3 YYY + 4 YYY + 5 YYY +\end{verbatim} + \end{small} +\end{center} + + +\begin{SaveVerbatim}{eqpts} +variable equipe char(4) +prompt Entrer une equipe +accept vequipe + +variable vannee number +prompt Entrer une annee +accept vannee + +DECLARE +dnom varchar2(20); +dprenom varchar2(20); +dposte char(2); +didjoueur NUMNER; +dnbfautes number; +dcpt number; + +CURSOR Cnom IS SELECT j.idjoueur, j.Nom, j.Prenom, j.Poste FROM JOUEUR j, +JOUE e, MATCH m WHERE j.id_joueur = e.id_joueur and id +AND ( m.Date_Match > TO_DATE('01/01/'||'&vannee',DD/MM/YYYY) AND +m.Date_Match < TO_DATE('12/31/'||'&vannee',DD/MM/YYYY) ); + +CURSOR Cfaute IS SELECT COUNT(ID_match) FROM JOUE +WHERE id_joueur = didjoueur +GROUP BY FAUTES; + +BEGIN +INSERT INTO tligne VALUES (EQUIPE'||'&vequipe'); +INSERT INTO tligne VALUES ('Nom Prenom Poste'); +OPEN Cnom; +FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; +WHILE Cnom%found LOOP + INSERT INTO tligne VALUES (dnom||' '||dprenom||' '||dposte); + OPEN Cfaute; + + dcpt:=0; + INSERT INTO tligne VALUES (Faute Nn Matchs); + FETCH Cfaute INTO dnbfaute; + WHILE Couest%found LOOP + INSERT INTO tligne VALUES (dcpt||' '||dnbfaute); + dcpt:=dcpt+1; + FETCH Cfaute INTO dnbfaute; + END LOOP; + CLOSE Cfaute; + + FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; +END LOOP; +CLOSE Cnom; + +END; +. +/ +SELECT * FROM tligne ; +\end{SaveVerbatim} + + + \cache{\begin{footnotesize} + \BUseVerbatim{eqpts} + \end{footnotesize} + } + + + + + \newpage + \item (10 points) \'Ecrire un code PL/SQL qui permet de saisir un nouveau joueur en entrant les six champs n\'ecessaires. Lever une exception la clef primaire saisie n'est pas valide. @@ -592,98 +690,6 @@ set echo on; %% \end{footnotesize} %% } -\item (20 points) Lister dans une table \code{TLIGNES} tous les - joueurs d'un \'equipe donn\'ee par l'utilisateur et d'une ann\'ee, - afficher leur nom, pr\'enom, poste et le nombres de match o\`u il a - fait 0, 1, 2, 3, 4 ou 5 fautes, durant cette ann\'ee civile : -\begin{center} - \begin{small} -\begin{verbatim} - EQUIPE XXX - Nom Prenom Poste - XXXXXX XXXXXXX XXXXXX 0 - Fautes Nb Matchs - 0 YYY - 1 YYY - 2 YYY - 3 YYY - 4 YYY - 5 YYY - - XXXXXX XXXXXXX XXXXXX 0 - Fautes Nb Matchs - 0 YYY - 1 YYY - 2 YYY - 3 YYY - 4 YYY - 5 YYY -\end{verbatim} - \end{small} -\end{center} - - -\begin{SaveVerbatim}{eqpts} -variable equipe char(4) -prompt Entrer une equipe -accept vequipe - -variable vannee number -prompt Entrer une annee -accept vannee - -DECLARE -dnom varchar2(20); -dprenom varchar2(20); -dposte char(2); -didjoueur NUMNER; -dnbfautes number; -dcpt number; - -CURSOR Cnom IS SELECT j.idjoueur, j.Nom, j.Prenom, j.Poste FROM JOUEUR j, -JOUE e, MATCH m WHERE j.id_joueur = e.id_joueur and id -AND ( m.Date_Match > TO_DATE('01/01/'||'&vannee',DD/MM/YYYY) AND -m.Date_Match < TO_DATE('12/31/'||'&vannee',DD/MM/YYYY) ); - -CURSOR Cfaute IS SELECT COUNT(ID_match) FROM JOUE -WHERE id_joueur = didjoueur -GROUP BY FAUTES; - -BEGIN -INSERT INTO tligne VALUES (EQUIPE'||'&vequipe'); -INSERT INTO tligne VALUES ('Nom Prenom Poste'); -OPEN Cnom; -FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; -WHILE Cnom%found LOOP - INSERT INTO tligne VALUES (dnom||' '||dprenom||' '||dposte); - OPEN Cfaute; - - dcpt:=0; - INSERT INTO tligne VALUES (Faute Nn Matchs); - FETCH Cfaute INTO dnbfaute; - WHILE Couest%found LOOP - INSERT INTO tligne VALUES (dcpt||' '||dnbfaute); - dcpt:=dcpt+1; - FETCH Cfaute INTO dnbfaute; - END LOOP; - CLOSE Cfaute; - - FETCH Cnom INTO didjoueur, dnom, dprenom, dposte; -END LOOP; -CLOSE Cnom; - -END; -. -/ -SELECT * FROM tligne ; -\end{SaveVerbatim} - - - \cache{\begin{footnotesize} - \BUseVerbatim{eqpts} - \end{footnotesize} - } - \end{enumerate} \end{exercice}