Les procédures stockées contiennent du code SQL compilé, permettant d'exécuter des requêtes lourdes ou des instructions régulièrement utilisées sur des bases de données.
Les procédures stockées sont conservées dans la base de données dans une forme exécutable et sont capables d'appeler d'autres procédures ou fonctions comme d'être appelées par d'autres programmes.
La structure modulaire de telles procédures permet de concevoir des petites unités programmatiques indépendantes, donc plus rapides à charger en mémoire et partant à exécuter dans une base de données.
A l'instar des procédures des langages de programmation, outre qu'elles soient composées de diverses instructions, les procédures stockées sont capables de recevoir des paramètres d'entrée et de retourner des valeurs en sortie.
La création des procédures stockées s'effectue par l'intermédiaire de l'instruction CREATE PROCEDURE.
Syntaxe pour SQL ServerCREATE PROC [ EDURE ] nom_procedure [ ; nombre ] [ { @parametre type_donnee } [ VARYING ] [ = valeur_defaut ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS instructions_SQL... GO |
La clause VARYING, applicable aux paramètres de type CURSOR, indique le jeu de résultats pris en charge.
La clause OUTPUT permet de retourner la valeur aux instructions appelantes.
L'instruction WITH RECOMPILE spécifie que la procédure est recompilée à l'exécution sans utiliser le cache pour le plan de la procédure.
L'option RECOMPILE est généralement utilisée pour des valeurs temporaires ou atypiques sans remplacer le plan d'exécution placé en mémoire cache.
La clause WITH ENCRYPTION indique un cryptage de l'entrée de la table syscomments contenant le texte de l'instruction CREATE PROCEDURE. L'argument ENCRYPTION permet d'éviter la publication de la procédure dans le cadre de la réplication SQL Server.
La clause FOR REPLICATION indique que la procédure stockée doit être exécutée lors de la modification de la table concernée par un processus de réplication.
La clause AS indique les actions entreprises par la procédure.
L'instruction GO signale la fin d'un jeu d'instructions.
Syntaxe pour OracleCREATE [OR REPLACE] PROCEDURE [schema .] procedure [ ( argument [ IN | OUT | IN OUT ] [ NOCOPY ] type_donnee [, argumentN [ IN | OUT | IN OUT ] [ NOCOPY ] type_donnee] ) ] [ AUTHID { CURRENT_USER | DEFINER }] { IS | AS } { instruction_pl/sql | instruction_langage }; |
La commande OR REPLACE recrée la procédure stockée si elle existe déjà.
La clause OUT permet de retourner la valeur aux instructions appelantes.
La clause IN est utilisée pour spécifier une valeur pour l'argument en appelant la procédure.
La clause AS (dépréciée) ou IS indique les actions entreprises par la procédure.
Les procédures stockées peuvent être appelées au moyen de l'instruction EXECUTE (SQL Server) ou CALL (Oracle) à partir d'une autre procédure ou d'un lot d'instructions. SQL Server peut utiliser une abréviation EXEC.
-- SQL Server EXECUTE Procedure @Parametre = Valeur, ..., @ParametreN = ValeurN -- Oracle CALL Procedure(Valeur, ..., ValeurN) |
-- Instruction pour SQL Server CREATE PROCEDURE Ajout_Enregistrement @proc_ID CHAR(10), @proc_Nom VARCHAR(20), @proc_Prenom VARCHAR(20), @proc_CP CHAR(5) AS INSERT INTO Fiche_Personne (ID, Nom, Prenom, CP) VALUES (@proc_ID, @proc_Nom, @proc_Prenom, @proc_CP) GO -- Instruction pour Oracle CREATE PROCEDURE Ajout_Enregistrement ( proc_ID IN CHAR(10), proc_Nom IN VARCHAR(20), proc_Prenom IN VARCHAR(20), proc_CP IN CHAR(5) ) IS BEGIN INSERT INTO Fiche_Personne (ID, Nom, Prenom, CP) VALUES (proc_ID, proc_Nom, proc_Prenom, proc_CP) END; -- Utilisation -- Sous SQL Server execute Ajout_Enregistrement '0000075036', 'ANTONIN', 'Jacques', '93300' -- Sous Oracle call Ajout_Enregistrement('0000075036', 'ANTONIN', 'Jacques', '93300'); |