master
Pascal Lafourcade 5 years ago
parent 90eab81523
commit bb9c13880e

@ -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 nest 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,34 +157,33 @@ End;
\end{lrbox}
\cache{\usebox\avecalter}
\item (2+2+4=8 points) Donner un exemple simple qui nest 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}
%% \item (2+2+4=8 points) Donner un exemple simple qui nest 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 ;}
%% \BUseVerbatim{VerbEnv}
%% } \end{enumerate}
\end{enumerate}
} \end{enumerate}
\end{exercice}
\newpage

Loading…
Cancel
Save