|
|
|
@ -90,7 +90,7 @@
|
|
|
|
|
|
|
|
|
|
\begin{center}
|
|
|
|
|
NOM : \hfill Partiel \hfill~\\
|
|
|
|
|
PRENOM : \hfill 90 minutes, 80 points \hfill ~\\
|
|
|
|
|
PRENOM : \hfill 90 minutes, 90 points \hfill ~\\
|
|
|
|
|
GROUPE : \hfill Aucun document autoris\'e \hfill~\\
|
|
|
|
|
\end{center}
|
|
|
|
|
|
|
|
|
@ -101,14 +101,25 @@
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item (3 points) Expliquer \`a quoi sert un curseur.
|
|
|
|
|
\cache{Un curseur permet de r\'ecup\'erer des donn\'ees multiples.}
|
|
|
|
|
\item (5 points) Donner un exemple simple qui n’est pas possible de
|
|
|
|
|
traiter sans un curseur, et expliquer pourquoi. \cache{Une
|
|
|
|
|
requete qui renvoie plein de donn\'ees .}
|
|
|
|
|
\item (5 points) Donner un exemple simple de requ\^ete en
|
|
|
|
|
pr\'ecisant la table utilis\'ee qui n’est pas possible de traiter
|
|
|
|
|
sans un curseur, et expliquer pourquoi. \cache{SELECT *
|
|
|
|
|
|
|
|
|
|
from ETUDIANTS
|
|
|
|
|
|
|
|
|
|
WHERE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Une requete qui
|
|
|
|
|
renvoie plein de donn\'ees.}
|
|
|
|
|
\item (12 points) Donner un exemple simple d'utilisation d'un curseur.
|
|
|
|
|
\newsavebox\dd
|
|
|
|
|
\begin{lrbox}{\dd}
|
|
|
|
|
\begin{minipage}{\textwidth}
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
SET echo off;
|
|
|
|
|
SET verify off;
|
|
|
|
|
SET feedback off;
|
|
|
|
|
DECLARE
|
|
|
|
|
dnom VARCHAR2(100);
|
|
|
|
|
CURSOR C SELECT nom from ETUDIANT WHERE age > 18;
|
|
|
|
@ -124,6 +135,9 @@ CLOSE C;
|
|
|
|
|
END;
|
|
|
|
|
.
|
|
|
|
|
/
|
|
|
|
|
SET echo on;
|
|
|
|
|
SET verify on;
|
|
|
|
|
SET feedback on;
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
\end{minipage}
|
|
|
|
|
\end{lrbox}
|
|
|
|
@ -138,27 +152,47 @@ END;
|
|
|
|
|
\ \\
|
|
|
|
|
\begin{enumerate}
|
|
|
|
|
\item (3 points) Expliquer ce qu'est une exception.
|
|
|
|
|
\cache{Une exception permet de r\'ealiser un traitement lors
|
|
|
|
|
qu'une erreur SQL se produit.}
|
|
|
|
|
\cache{Une exception permet de r\'ealiser un traitement
|
|
|
|
|
|
|
|
|
|
lors qu'une erreur SQL se produit.
|
|
|
|
|
|
|
|
|
|
ou lorsque l utilisateur le decide}
|
|
|
|
|
\item (12 points) Donner un exemple de cr\'eation d'exception \code{MINEUR}
|
|
|
|
|
qui est lev\'ee si la table \code{ETUDIANT (NOM VARCHA2(100), AGE NUMBER);} contient au moins un mineur et affiche le nombre de mineurs.
|
|
|
|
|
\newsavebox\avecalter
|
|
|
|
|
\begin{lrbox}{\avecalter}
|
|
|
|
|
\begin{minipage}{\textwidth}
|
|
|
|
|
\begin{verbatim}
|
|
|
|
|
|
|
|
|
|
SET echo off;
|
|
|
|
|
SET verify off;
|
|
|
|
|
SET feedback off;
|
|
|
|
|
|
|
|
|
|
DECLARE
|
|
|
|
|
Dnbmineur
|
|
|
|
|
MINEUR EXCEPTION
|
|
|
|
|
|
|
|
|
|
BEGIN
|
|
|
|
|
SELECT count(*) into Dnbmineur FROM ETUDIANT WERE AGE < 18;
|
|
|
|
|
IF Dnbmineur > 0 THEN RAISE MINEUR
|
|
|
|
|
SELECT count(*) into Dnbmineur
|
|
|
|
|
FROM ETUDIANT
|
|
|
|
|
WERE AGE < 18;
|
|
|
|
|
|
|
|
|
|
IF Dnbmineur > 0
|
|
|
|
|
THEN RAISE MINEUR
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
EXCEPTION
|
|
|
|
|
WHEN MINEUR THEN
|
|
|
|
|
INSERT INTO tligne VALUES();
|
|
|
|
|
End;
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
.
|
|
|
|
|
/
|
|
|
|
|
|
|
|
|
|
SET echo on;
|
|
|
|
|
SET verify on;
|
|
|
|
|
SET feedback on;
|
|
|
|
|
\end{verbatim}
|
|
|
|
|
\end{minipage}
|
|
|
|
|
\end{lrbox}
|
|
|
|
@ -298,14 +332,112 @@ 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 (15 points) \'Ecrire un code PL/SQL qui permet de saisir un
|
|
|
|
|
\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.
|
|
|
|
|
|
|
|
|
@ -557,13 +689,11 @@ set echo on;
|
|
|
|
|
%% \BUseVerbatim{Allstar}
|
|
|
|
|
%% \end{footnotesize}
|
|
|
|
|
%% }
|
|
|
|
|
|
|
|
|
|
\end{enumerate}
|
|
|
|
|
|
|
|
|
|
\end{exercice}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\end{document}
|
|
|
|
|