| 11
Les Procédure Stockées ou Stored Procedures
Une procédure
stockée est un groupe d'instructions SQL qui forme une unité
logique et effectue une tâche particulière. Les procédures
stockées sont utilisées pour encapsuler un jeu d'opérations
ou de requêtes à exécuter sur un serveur de base de
données. Par exemple, les opérations sur une base de données
d'employées (embauche, augmentation etc...) peuvent être
codées en procédures stockées puis exécutées.
Elles peuvent être compilées puis exécutées
avec différents paramètres et différents résultats,
et elles possèdent plusieurs combinaisons d'entrées, de
sorties et de paramètres entrées/sorties.
Les procédures
Stockées sont supportées par la plupart des SGBD, mais il
y a quand même quelques variations dans leur syntaxe. Pour cette
raison, nous vous montrerons un simple exemple de ce à quoi une
procédure stockée ressemble et comment l'invoquer avec JDBC,
mais cet exemple n'est pas fait pour être exécuté.
11.0 Instructions
SQL pour créer des procédures Stockées.
Cette section traite
des procédures stockées très simplistes sans paramètres.
Même si les procédures stockées effectuent généralement
des taches bien plus complexes que celles présentées dans
cet exemple, il sert tout de même à illustrer certains points
à leurs propos. Comme nous l'avons dit précédemment,
la syntaxe est différente pour chaque SGBD. Par exemple, certains
utilisent begin . . . end ou d'autres mots clés pour indiquer le
commencement et la fin de la définition de la procédure.
Dans certain SGBD, cette instruction SQL créera une procédure
stockée :
create
procedure SHOW_FOURNISSEURS
as
SELECT FOURNISSEURS.NOM_FO, CAFE.NOM_CAFE
FROM FOURNISSEURS, CAFE
WHERE FOURNISSEURS.FO_ID = CAFE.FO_ID
order by NOM_FO
Le code qui suit met
l'instruction SQL dans une chaîne de caractères et l'assigne
à la variable createProcedure, que nous utiliserons plus tard :
String
createProcedure =
"create procedure SHOW_FOURNISSEURS" +
"as" +
"select FOURNISSEURS.NOM_FO, CAFE.NOM_CAFE" +
"from FOURNISSEURS, CAFE" +
"where FOURNISSEURS.FO_ID = CAFE.FO_ID" +
"order by NOM_FO";
Le fragment de code
suivant utilise l'objet Connexion conn pour créer un objet Statement,
qui sera utilisé pour envoyer l'instruction SQL afin de créer
la procédure stockée sur la base de données :
Statement
stmt = conn.createStatement();
stmt.executeUpdate(createProcedure);
La procédure
SHOW_FOURNISSEURS sera compilée et stockée dans la base
de données comme un objet pouvant être appelé de façon
similaire à l'appel d'une méthode.
11.1 Appeler une
procédure stockée avec JDBC
JDBC vous permet d'appeler
une procédure stockée sur la base de données depuis
une application écrite en Java. La première étape
est de créer un objet CallableStatement. Comme avec les objets
Statement et PreparedStatement, ceci est fait avec une connexion ouverte.
Un objet CallableStatement contient l'appel d'une procédure, il
ne contient pas la procédure elle-même. La première
ligne de code ci-dessous crée un appel à la procédure
stockée SHOW_FOURNISSEURS en utilisant la connexion conn. La partie
qui est entre accolade est la syntaxe pour la procédure stockée.
Quand le driver rencontre "{call SHOW_FOURNISSEURS}", il traduira
cette syntaxe en SQL natif utilisé par la base de données
pour appeler la procédure stockée nommée SHOW_FOURNISSEURS
:
CallableStatement
cs = conn.prepareCall("{call SHOW_FOURNISSEURS}");
ResultSet rs = cs.executeQuery();
Notez que la méthode
pour exécuter cs est executeQuery car cs appelle une procédure
stockée qui contient une requête et produit un resultset.
Si la procédure avait contenue une mise à jour ou une des
instructions DDL, la méthode executeUpdate aurait été
utilisée. Comme c'est parfois le cas, une procédure stockée
contient plus d'une instruction SQL, qui pourrait produire plus d'un résultset,
plus d'une mise à jour, ou une combinaison de result set et de
mise à jour. Dans ce cas, lorsqu'il y a de multiples résultats,
la méthode execute devra être utilisé pour exécuter
CallableStatement.
La classe CallableStatement
est une classe dérivée de PrepareStatement, donc un objet
CallableStatement peut avoir des paramètres d'entrées tout
comme l'objet PreparedStatement. En plus, un objet CallableStatement peut
avoir des paramètres de sorties ou des paramètres qui sont
fait pour l'entrée et la sortie. Les paramètres INOUT et
la méthode execute sont rarement utilisées.
Précédent
|