Vous êtes sur la page 1sur 17

Programmation

FERDINAND KAHENGA
Procédures et fonctions

 Il est possible en utilisant SQL Server d’enregistrer certains


scripts qui pourront être réutilisables sur la base des données.
 Un script peut contenir plusieurs instructions SQL que l’on
peut exécuter les unes après les autres
 Avec le Transact SQL, on peut créer des objets de type
procédure, fonctions, des triggers, etc
 L’avantage majeur qu’il y a en ayant des scripts sur la base
des données est qu’une application externe peut les utiliser
sans se soucier de comment la base des données va opérer
 La rapidité dans l’exécution
Procédure

 CREATE PROCEDURE NOM_PROCEDURE (PARAMETRES)


 AS
 --CODE DE LA PROCEDURE --
 GO
 Exemple
 CREATE PROC ps_insert1(@tel char(10),@parrain int,@nom varchar(20))
 AS
 insert into T_Etudiant(tel,parrain,nom)
 Values(@tel,@parrain,@nom)
Procédure

 Dans l’exemple précédent


 ps_insert1 est le nom de la procédure stockée
 @tel char(10) est un paramètre suivi de son type
 AS mot clé nous introduisant au corps de la procédure
 insert into T_Etudiant(tel,parrain,nom)
Values(@tel,@parrain,@nom) est le corps
 Pour exécuter une procédure on utilise le mot clé exec suivi
du nom de la procédure:
 exec ps_insert1 ‘0993773’,1,’Ferdinand’
Procédure

 DECLARE permet de déclarer une variable


 Declare @NOM varchar(50) permet de déclarer une variable de type
varchar. Une variable commence toujours par @
 SELECT permet d’affecter une valeur à une variable
 SELECT @NOM=‘FERDINAND’
 PRINT: est le mot clé permettant d’afficher
 PRINT ‘VIDE’ affichera VIDE
 PRINT “NOM’+@NOM fait la concaténation
Procédure

 Il est possible de poser des conditions avec la clause IF


 IF EXISTS et IF NOT EXISTS: renvoie vrai ou faux si la sous-requête renvoie une
ligne
Procédure

 CREATE proc ps_supp1 (@id int) AS


 declare @tel char(10);
 if not exists(select * from T_Etudiant where id=@id)
 BEGIN
 Print 'Cet étudiant est inexistant';
 Return;
 END
 else
 BEGIN
 select @tel=tel from T_Etudiant where id=@id;
 Print 'Numero '+ @tel;
 END
Procédure

 On peut utiliser la boucle While pour effectuer des opérations répétitives


 CREATE PROC ps_insert1(@tel char(10),@parrain int,@nom varchar(20))
 AS
 Declare @compt int;
 Select @compt=0;
 While @compt<5
 BEGIN
 insert into T_Etudiant(tel,parrain,nom) Values(@tel,@parrain,@nom);
 select @compt=@compt+1;
 END
Modèle Exercice

 La base de données supermarchedb a comme modèle


 tb_article(reference int auto-increment,nom varchar(50))
 tb_ligne(#refArticle int,#numFacture int,quantite int)
 tb_facture(numFacture int auto-increment,#idClient int,qte int)
 tb_approvisionnement(id int auto-increment,#refArticle int,qte int,date Date)
 tb_client(idClient int auto-increment,nomClient varchar(50),adresse varchar(50))
 NB : # devant le nom d’un attribut signifie que l’attribut est une clé étrangère.
Modèle Exercice
Exercice

 Ecrire une procédure stockée nom_article qui affiche le nom de l’article dont
la référence est donnée en paramètre. Montrer par la suite son exécution

 Pour exécuter
Exercice

 Ecrire une fonction nbre_article qui retourne le nombre d’articles de la


table tb_article
Exercice

 Que fait la procédure stockée stock suivante?


Exercice

 Ecrire une procédure stockée ps_client qui insère une ligne dans la table
tb_client de la base des données supermarchedb. La procédure doit
prendre en paramètre l’identifiant du client, son nom et son adresse. Le
message à afficher est “Insertion réussie” si l’id du client n’existe pas ou
“Cet Id existe déjà”. Dans ce dernier cas l’insertion ne doit pas avoir lieu.
 Montrer un exemple d’exécution de votre procédure
Exercice
Exercice

 Ecrire une fonction fs_stock qui retourne le nombre en stock (tb_approvisionnement)


d’un article donné en paramètre
 Ecrire une procédure ps_vente qui prend en paramètre le nom d’un article et la
quantité vendue.
 Si le nom de l’article existe dans la table tb_article,
 utiliser sa référence pour déterminer son nombre en stock (à l’aide de fs_stock)
 Insérer dans la table tb_approvisionnement une ligne de cet article avec comme qte l’opposée de la
valeur vendue
 Sinon afficher un message indicatif du problème

 Sinon afficher le message “Cet article n’existe pas”

Vous aimerez peut-être aussi