Exercices Procédures stockées
1--Ecrire un programme qui calcule le montant d’une commande et affiche un
message 'Commande Normale' ou 'Commande Spéciale' selon que le montant est
inférieur ou supérieur à 100000 DH
Declare @Montant decimal
Set @Montant=(Select Sum(PUArt*QteCommandee) from Commande C, Article
A, LigneCommande LC where C.NumCom=LC.NumCom and
LC.NumArt=A.NumArt and C.NumCom=10)
If @Montant is null
Begin
Print 'Cette Commande n''existe pas ou elle n''a pas d''ingrédients'
Return
End
if @Montant <=10000
Print 'Commande Normale'
Else
Print 'Commande Spéciale
2--Ecrire un programme qui supprime l'article numéro 8 de la commande numéro 5
et met à jour le stock. Si après la suppression de cet article, la commande numéro 5
n'a plus d'articles associés, la supprimer.
Declare @Qte decimal
Set @Qte=(select QteCommandee from LigneCommande where NumCom=5 and
NumArt=8)
Delete from LigneCommande where NumCom=5 and NumArt=8
Update article set QteEnStock=QteEnStock+@Qte where NumArt=8
if not exists (select numcom from LigneCommande where NumCom=5)
Delete from commande where NumCom=5
3. Ecrire un programme qui affiche la liste des commandes et indique pour chaque
commande dans une colonne Type s'il s'agit d'une commande normale
(montant <=100000 DH) ou d'une commande spéciale (montant >= 100000 DH)
Select C.NumCom, DatCom, Sum(PUArt*QteCommandee), 'Type'=
Case
When Sum(PUArt*QteCommandee) <=10000 then 'Commande Normale'
Else 'Commande Spéciale'
End
From Commande C, Article A, LigneCommande LC
Where C.NumCom=LC.NumCom and LC.NumArt=A.NumArt
Group by C.NumCom, DatCom
4. A supposer que toutes les commandes ont des montants différents, écrire un
programme qui stocke dans une nouvelle table temporaire les 5 meilleures
commandes (ayant le montant le plus élevé) classées par montant décroissant (la
table à créer aura la structure suivante : NumCom, DatCom, MontantCom)
Create Table T1 (NumCom int, DatCom DateTime, MontantCom decimal)
Insert into T1 Select Top 5 C.NumCom, DatCom, Sum(PUArt*QteCommandee) as
Mt From Commande C, Article A, LigneCommande LC
Where C.NumCom=LC.NumCom and LC.NumArt=A.NumArt
Group by C.NumCom, DatCom
Order by Mt Desc
5---Ecrire un programme qui :
Recherche le numéro de commande le plus élevé dans la table commande
et l'incrémente de 1
Enregistre une commande avec ce numéro
Pour chaque article dont la quantité en stock est inférieure ou égale au seuil
minimum enregistre une ligne de commande avec le numéro calculé et une
quantité commandée égale au triple du seuil minimum
if exists(select NumArt from article where QteEnStock<=SeuilMinimum)
Begin
Declare @a int
set @a=(select max(NumCom) from commande) + 1
insert into commande values(@a, getdate())
insert into lignecommande Select @a, NumArt, SeuilMinimum * 3
From article Where QteEnStock <=SeuilMinimum
End
1--Ecrire un programme qui calcule le montant d’une commande et affiche un
message 'Commande Normale' ou 'Commande Spéciale' selon que le montant est
inférieur ou supérieur à 100000 DH
Declare @Montant decimal
Set @Montant=(Select Sum(PUArt*QteCommandee) from Commande C, Article
A, LigneCommande LC where C.NumCom=LC.NumCom and
LC.NumArt=A.NumArt and C.NumCom=10)
If @Montant is null
Begin
Print 'Cette Commande n''existe pas ou elle n''a pas d''ingrédients'
Return
End
if @Montant <=10000
Print 'Commande Normale'
Else
Print 'Commande Spéciale
2--Ecrire un programme qui supprime l'article numéro 8 de la commande numéro 5
et met à jour le stock. Si après la suppression de cet article, la commande numéro 5
n'a plus d'articles associés, la supprimer.
Declare @Qte decimal
Set @Qte=(select QteCommandee from LigneCommande where NumCom=5 and
NumArt=8)
Delete from LigneCommande where NumCom=5 and NumArt=8
Update article set QteEnStock=QteEnStock+@Qte where NumArt=8
if not exists (select numcom from LigneCommande where NumCom=5)
Delete from commande where NumCom=5
3. Ecrire un programme qui affiche la liste des commandes et indique pour chaque
commande dans une colonne Type s'il s'agit d'une commande normale
(montant <=100000 DH) ou d'une commande spéciale (montant >= 100000 DH)
Select C.NumCom, DatCom, Sum(PUArt*QteCommandee), 'Type'=
Case
When Sum(PUArt*QteCommandee) <=10000 then 'Commande Normale'
Else 'Commande Spéciale'
End
From Commande C, Article A, LigneCommande LC
Where C.NumCom=LC.NumCom and LC.NumArt=A.NumArt
Group by C.NumCom, DatCom
4. A supposer que toutes les commandes ont des montants différents, écrire un
programme qui stocke dans une nouvelle table temporaire les 5 meilleures
commandes (ayant le montant le plus élevé) classées par montant décroissant (la
table à créer aura la structure suivante : NumCom, DatCom, MontantCom)
Create Table T1 (NumCom int, DatCom DateTime, MontantCom decimal)
Insert into T1 Select Top 5 C.NumCom, DatCom, Sum(PUArt*QteCommandee) as
Mt From Commande C, Article A, LigneCommande LC
Where C.NumCom=LC.NumCom and LC.NumArt=A.NumArt
Group by C.NumCom, DatCom
Order by Mt Desc
5---Ecrire un programme qui :
Recherche le numéro de commande le plus élevé dans la table commande
et l'incrémente de 1
Enregistre une commande avec ce numéro
Pour chaque article dont la quantité en stock est inférieure ou égale au seuil
minimum enregistre une ligne de commande avec le numéro calculé et une
quantité commandée égale au triple du seuil minimum
if exists(select NumArt from article where QteEnStock<=SeuilMinimum)
Begin
Declare @a int
set @a=(select max(NumCom) from commande) + 1
insert into commande values(@a, getdate())
insert into lignecommande Select @a, NumArt, SeuilMinimum * 3
From article Where QteEnStock <=SeuilMinimum
End