Téléchargez comme DOC, PDF, TXT ou lisez en ligne sur Scribd
Télécharger au format doc, pdf ou txt
Vous êtes sur la page 1sur 3
Exercices
Créer le schéma relationnel suivant :
Commande(NumCom, DatCom) LigneCommande(NumCom,NumArt,QteCommandee) Article(NumArt,PUArt,QteEnStock, SeuilMinimum) 1 . Ecrire un programme qui calcule le montant de la commande numéro 10 et affiche un message 'Commande Normale' ou 'Commande Spéciale' selon que le montant est inférieur ou supérieur à 100000 DH 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. 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) 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) 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 Solutions 1. 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. 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. 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. 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. 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