master
Pascal Lafourcade 5 years ago
parent 90eab81523
commit bb9c13880e

@ -85,26 +85,70 @@
NOM : \hfill Partiel \hfill~\\ NOM : \hfill Partiel \hfill~\\
PRENOM : \hfill 90 minutes, 75 points \hfill ~\\ PRENOM : \hfill 90 minutes, 75 points \hfill ~\\
GROUPE : \hfill Aucun document autoris\'e \hfill~\\ GROUPE : \hfill Aucun document autoris\'e \hfill~\\
\end{center} \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} \begin{enumerate}
\item (3 points) Expliquer ce qu'est une exception. \item (3 points) Expliquer ce qu'est une exception.
\cache{Une exception permet de r\'ealiser un traitement lors \cache{Une exception permet de r\'ealiser un traitement lors
qu'une erreur SQL se produit.} qu'une erreur SQL se produit.}
\item (4 points) Donner un exemple d'utilisation de l'exception \item (12 points) Donner un exemple de cr\'eation d'exception \code{MINEUR}
\verb+NO_DATA_FOUND+. 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 \newsavebox\avecalter
\begin{lrbox}{\avecalter} \begin{lrbox}{\avecalter}
\begin{minipage}{\textwidth} \begin{minipage}{\textwidth}
\begin{verbatim} \begin{verbatim}
Declare DECLARE
begin Dnbmineur
Select nom into dnom FROM ELEVE Where age < 0; MINEUR EXCEPTION
BEGIN
SELECT count(*) into Dnbmineur FROM ETUDIANT WERE AGE < 18;
IF Dnbmineur > 0 THEN RAISE MINEUR
END IF;
EXCEPTION EXCEPTION
when no_data_found then WHEN MINEUR THEN
INSERT INTO tligne VALUES(TO_CHAR(SQLCODE)||' '||SQLERRM||'Age negatif') ; INSERT INTO tligne VALUES();
End; End;
. .
/ /
@ -113,35 +157,34 @@ End;
\end{lrbox} \end{lrbox}
\cache{\usebox\avecalter} \cache{\usebox\avecalter}
\item (2+2+4=8 points) Donner un exemple simple qui nest pas possible de %% \item (2+2+4=8 points) Donner un exemple simple qui nest pas possible de
traiter sans un curseur, expliquer pourquoi et montrer comment %% traiter sans un curseur, expliquer pourquoi et montrer comment
créer un curseur et comment l'utiliser dans ce cas là. %% créer un curseur et comment l'utiliser dans ce cas là.
\begin{SaveVerbatim}{VerbEnv} %% \begin{SaveVerbatim}{VerbEnv}
Declare %% Declare
dnom Etudaint.nom%TYPE ; %% dnom Etudaint.nom%TYPE ;
Cursor r is Select nom from Etudiant FOR UPDATE; %% Cursor r is Select nom from Etudiant FOR UPDATE;
BEGIN %% BEGIN
OPEN r ; %% OPEN r ;
FETCH r INTO dnom ; %% FETCH r INTO dnom ;
WHILE r%FOUND %% WHILE r%FOUND
LOOP %% LOOP
UPDATE Etudiant SET nom=dnom||'old' WHERE CURRENT of r ; %% UPDATE Etudiant SET nom=dnom||'old' WHERE CURRENT of r ;
FETCH r INTO dnom ; %% FETCH r INTO dnom ;
END LOOP ; %% END LOOP ;
COMMIT; %% COMMIT;
CLOSE R ; %% CLOSE R ;
END ; %% END ;
\end{SaveVerbatim} %% \end{SaveVerbatim}
\cache{\code{Select nom into dnom from Etudiant ;} %% \cache{\code{Select nom into dnom from Etudiant ;}
ici la liste des noms ne va pas pouvoir rentrer dans dnom. %% \BUseVerbatim{VerbEnv}
Il faut donc utiliser un cureur : %% } \end{enumerate}
\BUseVerbatim{VerbEnv} \end{enumerate}
} \end{enumerate} \end{exercice}
\end{exercice}
\newpage \newpage

Loading…
Cancel
Save