You are on page 1of 17

Programmation SGBDR

Procdures stockes

Dfinition des procdures stockes

Ensemble dinstructions Transact SQL


Stockes sur le serveur
Constituent des mthodes encapsules
Grent les variables, lexcution conditionnelle et
dautres fonctionnalits de programmation

Trois principaux types


Systme : rsident dans la base de donnes Master et
permettent deffectuer des tches dadministration.
Prfixe sp_
Locales : sont cres dans les DB des utilisateurs
Etendues : implmentes comme des dll, elles sont
excutes en dehors de lenvironnement SQL.
Prfixe xp_

Avantages des procdures stockes

Partage de la logique dapplication


Permettent dencapsuler une fonctionnalit
dentreprise.
Les rgles dfinies sont centralises au mme
endroit et peuvent tre modifies en une seule fois.
Les clients utilisent ainsi les mmes procdures
stockes afin de garantir la cohrence des accs
aux donnes et leur modification

Avantages des procdures stockes

Scurit accrue
Elles permettent dviter que les utilisateurs
connaissent le dtail du schma des objets de la
base. Les utilisateurs naccdent pas directement
aux tables mais changent des valeurs au travers
des paramtres de ces dernires.
Les utilisateurs (applications) peuvent obtenir des
droits dexcution de la procdure stocke sans
disposer dautorisations directes sur les tables.

Avantages des procdures stockes

Amliorent les performances


Peuvent implmenter de nombreuses tches en
interne.
La logique conditionnelle permet de limiter le
nombre dinstructions excuter.
Elles contribuent rduire le trafic sur le rseau.
Au lieu denvoyer de nombreuses instructions
depuis lapplication cliente, on utilisera une
procdure stocke qui effectuera une opration
complexe en son sein.
Exemple : suppression de lignes en cascade.

Cration des procdures stockes

A laide de linstruction
CREATE PROCEDURE
Create Procedure dbo.PS_Emprunts_Retard
AS
Select * from Emprunts
Where DateRetour < GetDate()
AND Etat = E

La procdure sp_help permet dobtenir des


informations sur la procdure.
Ces dernires sont extraites de syscomments

Conseils pour la cration

Une tche par procdure


Comme pour les tches de dcoupage fonctions /
procdures dans un langage volu, il est
prfrable de spcialiser les procdures
laccomplissement dune seul tche.
Mise au point et maintenance facilites

Evitez le prfixe sp_ rserv aux procdures


systmes tout comme le prfixe xp_
Ne supprimez jamais directement les entres
dans syscomments
Testez vos procdures sur le serveur

Modification de procdures stockes

Modification dune procdure


ALTER PROC maprocedure AS .
Naffecte pas les procdures imbriques
Seuls les crateurs de la procdure et les membres
des rles sysadmin, db_owner et db_ddladmin
sont autoriss modifier une procdure.
On ne peut pas allouer lautorisation dexcuter
linstruction ALTER PROCEDURE

Suppression dune procdure


DROP PROCEDURE maprocedure

T SQL : contrle des flux

Niveau
Instruction
Bloc BEGIN
END
Bloc IF ELSE
WHILE

IF user_name() <> 'dbo'


BEGIN
RAISERROR('Rle sysadmin
requis',10,1)
RETURN 1
END
ELSE
BEGIN
DBCC CHECKDB(CasContacts)
RETURN 0
END

Utilisation de paramtres

Utilisation des paramtres en entre des


procdures stockes
Donner un nom de variable, un type et une
longueur @nomClient varchar(55)
Donner ventuellement une valeur par dfaut
de type constante ou Null (optionnel)
@villeClient varchar(100) = Null
Doivent tre dclars avant les instructions de la
procdure, donc avant linstruction AS

Utilisation de paramtres en entre


create procedure ps_Test
(@IDUtilisateur char(20),
@NomUtilisateur varchar(50)=Null )
as
SELECT * from Utilisateurs
where IDUtilisateur= @IDUtilisateur
or nomUtilisateur like @nomUtilisateur
Passage de valeurs par position
Execute ps_test 'Bost ou Execute ps_test 'Bost','ch%
Passage de valeurs par rfrence nomme
Execute ps_test @IDUtilisateur='Bost',@NomUtilisateur='ch%'

Utilisation de paramtres en sortie

Utilisation des paramtres en sortie des


procdures stockes
Comme paramtre en entre mais avec mot cl
output
Utilisation dun paramtre spcial, valeur de retour
pour rcuprer valeur associe instruction return

Utilisation de paramtres en sortie


create procedure ps_Test2
(@IDUtilisateur char(20),
@MotPasseUtilisateur varchar(20) output)
as
if exists(SELECT 1 from Utilisateurs where IDUtilisateur =
@IDUtilisateur)
BEGIN
SELECT @MotPasseUtilisateur=MotPasseUtilisateur from
Utilisateurs
where IDUtilisateur= @IDUtilisateur
return 0
END
else return 1

Utilisation de paramtres en sortie


DECLARE @ret int, @mot varchar(50)
Execute @ret = ps_test2 'Bost', @mot output
Print @ret
Print @mot
Rsultat :
0
bost

Utilisation de paramtres en sortie


Rcupration de la valeur affecte une cl primaire
La valeur affecte une colonne porteuse de la
proprit Identity est rcupre grce la fonction
SCOPE-IDENTITY()

Excution de procdures tendues

Un exemple frquemment employ est la


procdure tendue xp_cmdshell qui permet
denvoyer des lignes de commandes los
Execute master..xp_cmdshell dir c:\GestionCommandes

Autre exemple est xp_Sendmail qui permet


lenvoi de messages et de rsultats de requtes
en pice jointe.
Une session SQL Mail doit avoir t dmarre
pralablement.

Implmentation des procdures stockes

Cration, excution et modification


Utilisation de paramtres
Utilisation de procdures stockes tendues
Traitement des erreurs

You might also like