From bb9c13880e23d08f399bb54e26f89bfd1be28104 Mon Sep 17 00:00:00 2001 From: Pascal Lafourcade Date: Thu, 13 Feb 2020 14:10:31 +0100 Subject: [PATCH] exam --- EXOS/Partiel2020.tex | 115 +++++++++++++++++++++++++++++-------------- 1 file changed, 79 insertions(+), 36 deletions(-) diff --git a/EXOS/Partiel2020.tex b/EXOS/Partiel2020.tex index 3830fe4..e0c0dae 100644 --- a/EXOS/Partiel2020.tex +++ b/EXOS/Partiel2020.tex @@ -85,26 +85,70 @@ NOM : \hfill Partiel \hfill~\\ PRENOM : \hfill 90 minutes, 75 points \hfill ~\\ GROUPE : \hfill Aucun document autoris\'e \hfill~\\ - \end{center} -\begin{exercice}D\'efinitions (15 points) + + + +\begin{exercice}[Curseur (20 points)] \ \\ + \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 (12 points) Donner un exemple simple d'utilisation d'un curseur. + \newsavebox\dd + \begin{lrbox}{\dd} + \begin{minipage}{\textwidth} +\begin{verbatim} +DECLARE +dnom VARCHAR2(100); +CURSOR C SELECT nom from ETUDIANT WHERE age > 18; +BEGIN +OPEN C; +FETCH C into dnom; +WHILE +LOOP +INSERT INTO tligne VALUES(dnom) ; +FETCH C into dnom; +END LOOP; +CLOSE C; +END; +. +/ +\end{verbatim} + \end{minipage} + \end{lrbox} + \cache{\usebox\dd} + \end{enumerate} +\end{exercice} + + +\newpage + +\begin{exercice}[Exception (15 points)] + \ \\ \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.} - \item (4 points) Donner un exemple d'utilisation de l'exception - \verb+NO_DATA_FOUND+. + \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} -Declare -begin -Select nom into dnom FROM ELEVE Where age < 0; +DECLARE +Dnbmineur +MINEUR EXCEPTION +BEGIN +SELECT count(*) into Dnbmineur FROM ETUDIANT WERE AGE < 18; +IF Dnbmineur > 0 THEN RAISE MINEUR +END IF; EXCEPTION -when no_data_found then -INSERT INTO tligne VALUES(TO_CHAR(SQLCODE)||' '||SQLERRM||'Age negatif') ; +WHEN MINEUR THEN +INSERT INTO tligne VALUES(); End; . / @@ -113,35 +157,34 @@ End; \end{lrbox} \cache{\usebox\avecalter} - \item (2+2+4=8 points) Donner un exemple simple qui n’est pas possible de - traiter sans un curseur, expliquer pourquoi et montrer comment - créer un curseur et comment l'utiliser dans ce cas là. +%% \item (2+2+4=8 points) Donner un exemple simple qui n’est pas possible de +%% traiter sans un curseur, expliquer pourquoi et montrer comment +%% créer un curseur et comment l'utiliser dans ce cas là. - \begin{SaveVerbatim}{VerbEnv} -Declare -dnom Etudaint.nom%TYPE ; -Cursor r is Select nom from Etudiant FOR UPDATE; -BEGIN -OPEN r ; -FETCH r INTO dnom ; -WHILE r%FOUND -LOOP - UPDATE Etudiant SET nom=dnom||'old' WHERE CURRENT of r ; - FETCH r INTO dnom ; -END LOOP ; -COMMIT; -CLOSE R ; -END ; - \end{SaveVerbatim} - \cache{\code{Select nom into dnom from Etudiant ;} - - ici la liste des noms ne va pas pouvoir rentrer dans dnom. - - Il faut donc utiliser un cureur : -\BUseVerbatim{VerbEnv} +%% \begin{SaveVerbatim}{VerbEnv} +%% Declare +%% dnom Etudaint.nom%TYPE ; +%% Cursor r is Select nom from Etudiant FOR UPDATE; +%% BEGIN +%% OPEN r ; +%% FETCH r INTO dnom ; +%% WHILE r%FOUND +%% LOOP +%% UPDATE Etudiant SET nom=dnom||'old' WHERE CURRENT of r ; +%% FETCH r INTO dnom ; +%% END LOOP ; +%% COMMIT; +%% CLOSE R ; +%% END ; +%% \end{SaveVerbatim} +%% \cache{\code{Select nom into dnom from Etudiant ;} + +%% \BUseVerbatim{VerbEnv} -} \end{enumerate} -\end{exercice} +%% } \end{enumerate} + \end{enumerate} + + \end{exercice} \newpage