Merge branch 'master' of gitlab.iut-clermont.uca.fr:palafour/bdplsqproc

master
Pascal Lafourcade 5 years ago
commit 7b3ba43202

@ -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 nest 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 nest 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}

Loading…
Cancel
Save