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