\documentclass[12pt]{article}
%\usepackage{moodle}
\usepackage{sanssolmoodle}


\begin{document}

\begin{quiz}{Quizz Cours 2, Chapitre 7 a 8.2}


\begin{multi}[multiple,points=1]{01-Gestion des erreurs}
Que se passe-t-il lorsqu'une instruction PL/SQL se passe mal ?
\item rien
\item* une exception est lev\'ee
\item le programme appelle un ami programme
\end{multi}

\begin{multi}[points=1]{02-Gestion des erreurs}
O\`u est ce que l'on peut sp\'ecifier un comportement adapt\'e lorsqu'une erreur est lev\'ee  ?
\item* dans la section EXCEPTION
\item Nulle part
\item dans une section CATCH
\end{multi}

\begin{multi}[multiple, points=1]{03-Gestion des erreurs}
Combien existe-t-il de types d'erreurs ?
\item plus de 2
\item* 2 types, celle d'Oracle et celle d\'eclar\'ee par le d\'eveloppeur
\item qu'un seul et unique : le type erreur
\end{multi}

\begin{multi}[multiple, points=1]{04-Gestion des erreurs}
O\`u se situe la section EXCEPTION par rapport aux autres ?
\item DECLARE EXCEPTION BEGIN
\item* DECLARE BEGIN EXCEPTION
\item EXCEPTION DECLARE BEGIN
\end{multi}

\begin{multi}[multiple, points=1]{05-Gestion des erreurs}
O\`u doit-on initilialis\'e le message d'erreur possible li\'e \`a une requ\^ete SQL ?
\item Apr\`es la requ\^ete car avant on n'a pas l'erreur
\item*  Avant la requ\^ete car s'il y a une erreur on n'ex\'ecute pas le code apr\`es la reque\^ete
\end{multi}

\begin{multi}[multiple, points=1]{06-Gestion des erreurs}
Quelles sont les variables utilis\'ees pour documenter l'erreur ?
\item* SQLCODE
\item ERREUR
\item* SQLERRM
\item ERROR
\end{multi}

\begin{multi}[multiple, points=1]{07-Gestion des erreurs}
Que se passe-t-il lors d'une erreur ?
\item* On ex\'ecute la section EXCEPTION puis on sort du traitement
\item On sort du programme sans ex\'ecuter la section EXCEPTION parce qu'on est en erreur
\item On ex\'ecute le code jusqu'\`a la section EXCEPTION puis celui de la section EXCEPTION puis on finit le traitement
\end{multi}

\begin{multi}[multiple, points=1]{08-Gestion des erreurs}
Quels sont les couples code et description qui sont justes ?
\item*  +100 - NO\_DATA\_FOUND
\item 0 - FATAL\_ERROR
\item* -1422 - TOO\_MANY\_ROWS
\item* -1 - DUP\_VAL\_ON\_INDEX
\item -666 - DEVIL\_ERROR
\end{multi}

\begin{multi}[multiple, points=1]{09-Gestion des erreurs}
Que fait le code ci-dessous ?\\
BEGIN\\
INSERT INTO ttest (col1,col2,col3) VALUES (dcol1, dcol2, dcol3);\\
EXCEPTION\\
WHEN DUP\_VAL\_ON\_INDEX THEN\\
INSERT INTO Tligne VALUES (dcol1 {\textbar}{\textbar} ' d\'ej\`a existant');\\
END;
\item Il insert une ligne dans la table ttest et insert une ligne dans la table Tligne  
\item* Il insert une ligne dans la table ttest ou il insert une ligne dans la table Tligne
\item Il n'ins\'ere aucune ligne dans aucune table
\end{multi}

\begin{multi}[multiple, points=1]{10-Gestion des erreurs}
Est ce que le code ci-dessous permet de bien g\'erer l'erreur utilisateur ?\\
DECLARE\\
nom\_erreur EXCEPTION;\\
BEGIN\\
IF 0 THEN\\
   RAISE nom\_erreur;\\
END IF;\\
EXCEPTION\\
WHEN OTHERS THEN\\
INSERT INTO Tligne VALUES('Erreur globale');\\
WHEN nom\_erreur THEN\\
INSERT INTO Tligne VALUES('nom\_Erreur');\\
END;
\item VRAI
\item* FAUX
\end{multi}

\begin{multi}[multiple, points=1]{11-Les curseurs}
Quel est le but d'utiliser un curseur plut\^ot qu'une requ\^ete simple ?
\item par ce qu'est plus facile
\item* pour lire le r\'esultat d'une requ\^ete dans le cas o\`u elle d\'elivre plusieurs lignes
\end{multi}

\begin{multi}[multiple, points=1]{12-Les curseurs}
Quelle est la bonne syntaxe pour d\'eclarer un curseur ?
\item* CURSOR r IS SELECT codeRayon FROM trayon WHERE etage = detage;
\item CURSOR r IS SELECT codeRayon INTO dcodeRayon FROM trayon WHERE etage = detage;
\item CURSOR SELECT codeRayon FROM trayon WHERE etage = detage;
\end{multi}

\begin{multi}[multiple, points=1]{13-Les curseurs}
Que fait l'instruction OPEN du curseur ?
\item* Elle ex\'ecute la req\^ete et stocke le r\'esultat dans la variable curseur 
\item Elle ferme le curseur
\end{multi}

\begin{multi}[multiple, points=1]{14-Les curseurs}
Quelle est la bonne syntaxe de l'instruction FETCH du curseur ci-dessous ?\\
CURSOR r IS SELECT codeRayon, etage FROM trayon WHERE etage = detage;
\item FETCH r INTO dcodeRayon;
\item FETCH r;
\item* FETCH r INTO dcodeRayon, detage;
\end{multi}

\begin{multi}[multiple, points=1]{15-Les curseurs}
Comment sait-on s'il reste des donn\'ees \`a lire dans le curseur ?
\item On ne peut pas le savoir
\item* avec la variable nom\_curseur\%FOUND 
\item avec SQLCODE et SQLERRM
\end{multi}

\begin{multi}[multiple, points=1]{16-Les curseurs}
Quelle boucle ci-dessous permet de lire tous les enregistrements d'un curseur ?
\item WHILE r\%FOUND\\
LOOP\\
instructions;\\
END LOOP;
\item* WHILE r\%FOUND\\
LOOP\\
instructions;\\
FETCH r INTO dcodeRayon,detage;\\
END LOOP;
\end{multi}

\begin{multi}[multiple, points=1]{17-Les curseurs}
Que fait l'instruction CLOSE du curseur ?
\item Elle ex\'ecute la req\^ete et stocke le r\'esultat dans la variable curseur 
\item* Elle ferme le curseur
\end{multi}

\begin{multi}[multiple, points=1]{18-Les curseurs}
Quelle est la bonne syntaxe pour traiter le cas o\`u il n'y a aucun enregistrement ?
\item je ne sais pas
\item* IF NOT r\%FOUND
\item* IF r\%NOTFOUND
\item IF r IS NULL
\item IF r = ''
\end{multi}

\begin{multi}[multiple, points=1]{19-Les curseurs}
Peut-on mettre \`a jour la ligne courante du curseur  ?
\item* VRAI
\item FAUX
\end{multi}

\begin{multi}[multiple, points=1]{20-Les curseurs}
Quelle est la bonne syntaxe pour mettre \`a jour la ligne courante du curseur ?
\item je ne sais pas
\item CURSOR r IS SELECT codeRayon FROM trayon;\\
OPEN r;\\
FETCH r INTO dcodeRayon;\\
UPDATE trayon SET nomRayon = dnomRayon WHERE CURRENT OF r;
\item* CURSOR r IS SELECT codeRayon FROM trayon FOR UPDATE;\\
OPEN r;\\
FETCH r INTO dcodeRayon;\\
UPDATE trayon SET nomRayon = dnomRayon WHERE CURRENT OF r;
\end{multi}

\end{quiz}
\end{document}


