diff --git a/COURS/PLSQL.tex b/COURS/PLSQL.tex index 32d3095..8763946 100644 --- a/COURS/PLSQL.tex +++ b/COURS/PLSQL.tex @@ -344,14 +344,12 @@ Afin d'interagir avec l'utilisateur, il existe deux types de commandes. \section{Exécution du code PL/SQL} - En SQL, les commandes sont transmises les unes après les autres et traitées séparément par le moteur SQL, comme le montre la Figure~\ref{fig:plsql1}. \begin{figure}[htb] \begin{center} - \begin{tikzpicture} \node[draw] (a) at (0,1) {\begin{minipage}[h][2cm][t]{5cm} Fichier de commandes SQL\\ @@ -366,7 +364,6 @@ Fichier de commandes SQL\\ \draw[thick,-latex] (2.75,1) -- (7.75,1) node[midway,above] {\code{UPDATE} ...}; \draw[thick,-latex] (2.75,.25) -- (7.75,.25) node[midway,above] {\code{UPDATE} ...}; - \node[draw] (b) at (10,1) { \begin{minipage}[h][2cm][t]{4cm} \ \\ @@ -380,14 +377,12 @@ Fichier de commandes SQL\\ \caption{}\label{fig:plsql1} \end{figure} - En extension procédurale de SQL (\plsql{}), les blocs de commandes sont transmis globalement au moteur SQL, comme le montre la Figure~\ref{fig:plsql2}. \begin{figure}[htb] \begin{center} - \begin{tikzpicture} \node[draw] (a) at (0,1) {\begin{minipage}[h][3.25cm][t]{5cm} Bloc PL/SQL\\ @@ -431,7 +426,15 @@ Bloc PL/SQL\\ Le fichier de commandes ci-dessous permet la saisie de la référence d’un produit et l’affichage de sa désignation ou d’un  message -d’erreur si le N° de produit n’existe pas. +d’erreur si le N° de produit n’existe pas. Ce fichier comporte trois +parties : + \begin{itemize} + \item des commandes SQL+ pour la saisie de la référence produit, + \item un bloc \plsql{} encadr\'e dans l'exemple, il permet d'accéder + à la base de donn\'ees, + \item des commandes SQL+ pour afficher le résultat. + \end{itemize} + \begin{verbatim} set echo off @@ -468,18 +471,18 @@ set feed on set echo on \end{verbatim} -\begin{remarque} - Ce fichier comporte trois parties : - \begin{itemize} - \item des commandes SQL+ pour la saisie de la référence produit, - \item un bloc \plsql{} pour accéder à la base, - \item des commandes SQL+ pour afficher le résultat. - \end{itemize} -\end{remarque} +\faWarning{} Apr\`es la fin du bloc il faut imp\'erativement mettre : -\plsql{} ne comprend pas d’instruction de saisie ou d’affichage. Les -commandes \code{SET} positionnent des variables d’environnement pour -éviter que le système n’affiche des informations « polluant » le +\begin{itemize} +\item \code{.} : ce point indique la fin du mode PL/SQL, +\item \code{/} (seul sur une ligne) : cela déclenche l’exécution du + bloc PL/SQL ou de l’ ordre SQL stocké dans le buffer. +\end{itemize} + + + +Les commandes \code{SET} positionnent des variables d’environnement +pour éviter que le système n’affiche des informations « polluant » le résultat : \begin{itemize} \item \code{set echo off} évite que le système n’affiche la commande @@ -488,17 +491,16 @@ résultat : de substitution au moment où il la fait, \item \code{set feed off} évite que le système n’affiche le nombre de lignes sélectionnées, -\item \code{.} le point indique la fin du mode PL/SQL, -\item \code{/} (seul sur une ligne) déclenche l’exécution du bloc PL/SQL ou de l’ ordre SQL stocké dans le buffer. \end{itemize} - +\faWarning{} \plsql{} ne comprend pas d’instruction de saisie ou d’affichage. \begin{exercice} \'Ecrire un fichier SQL qui permet d'afficher le message ``Entrer votre age :'', de saisir l'\^age de l'utilisateur dans la variable - \code{vage} et d'afficher ``Votre age est 20 ans'' si $20$ est le - contenu de la variable \code{vage}. + \code{vage}, d'ajouter un \`a cette valeur et d'afficher ``Votre age + plus un est 20 ans'' si $19$ est la valeur saisie par l'utilisateur + et $20$ le contenu de la variable \code{vage}. \end{exercice} \cache{ @@ -510,7 +512,7 @@ ACCEPT vage begin -:vage:=\&vage; +:vage:= 1 + \&vage; end; @@ -537,10 +539,11 @@ sections. par un \code{;} \item Possibilité de placer des commentaires : \code{/* commentaire sur plusieurs lignes commençant par au moins un espace */} +\item Il est conseill\'e d'utiliser \code{-}\code{-} en d\'ebut de ligne pour les commentaires. \end{itemize} -Attention aux points virgules: en cas d’oubli, Oracle affiche un N° de -ligne attendant la suite de commande SQL. +\faWarning{} Attention aux points virgules: en cas d’oubli, Oracle affiche un +num\'ero de ligne attendant la suite de commande SQL. \begin{figure}[htb] \begin{center} @@ -889,7 +892,7 @@ END; \begin{exemple} Récupération du message d’erreur retourné par Oracle en cas d’exception. - Attention : \code{SQLERRM} et \code{SQLCODE} ne peuvent être +\faWarning{} Attention : \code{SQLERRM} et \code{SQLCODE} ne peuvent être utilisés directement dans une instruction SQL. Il faut les récupérer dans une variable. \begin{verbatim} @@ -988,7 +991,7 @@ UPDATE trayon SET nom_rayon = dnom_rayon WHERE CURRENT OF r; COMMIT; \end{verbatim} -Attention, terminer par \code{COMMIT}, sinon risque d’interblocage +\faWarning{} Attention, terminer par \code{COMMIT}, sinon risque d’interblocage entre deux exécutions qui voudraient écrire dans la même table. \begin{exercice}