Vous êtes sur la page 1sur 8

NTIC DEV WWW.NTICRIAD.

NET
GESTION DES STAGIAIRES
Soit la base de donnes suivante : Stagiaire (Nstagiaire, Nom, Prnom, datenaiss, , dateinscri, Adresse, tel, #Nfilire) Filire(Nfilire, Intitulfil, Capacit, nbreannes) Notation(Nnotation ,#Nstagaire, #Nmodule, note) Module (Nmodule, intitulmod, masse horaire) Crer les procdures stockes 1) La procdure permettant de lister les stagiaires dune filire donne Create proc ex1 @fil char(30) As Begin Select stagiaire.* from stagiaire , filiere Where stagiaire.nfilre = filire.nfilire and intitulfil=@fil End 2) La procdure permettant dafficher les stagiaires ayant lge dans la tranche prcis par lutilisateur CREATE PROC ex2 @d1 int ,@d2 int AS BEGIN SELECT * , datediff(year,datenaiss,getdate()) as age FROM STAGIAIRE Where datediff(year,datenaiss,getdate()) beetween (@d1 and @d2) END 3) Augmenter dun point les notes des stagiaires dans le module mtier et formation CREATE PROC ex3 AS BEGIN Update notation Set note =note+1 Where n_module in (select n_module from module formation) END

where intitulmod=mtier et

WWW.NTICRIAD.NET NTIC DEV

NTIC DEV WWW.NTICRIAD.NET


4) La liste des stagiaires dont le nom commence par une lettre spcifie par lutilisateur alter proc ex4 @l char(1) As Begin Select * from stagiaire Where nom like @l+'%' End

5) Le bulletin de notes dun stagiaire donn


Create proc ex5 @num int As begin select * from stagiaire where stagiaire.N_stagiaire=@num Select note , intmod from notation ,stagiaire, module where stagiaire.N_stagiaire = notation.N_stagiaire and stagiaire.N_stagiaire=@num and module.N_module= Notation.N_module compute avg(note) end

6) Liste des stagiaires inscrits entre deux dates


Create proc ex6 @d1 datetime, @d2 datetime As begin select * from stagiaire where dateinscrit between (@d1 and @d2) end 7) Liste des stagiaires non nots pour le module SGBD I Create proc ex7 As begin select * from stagiaire where n_stagiaire not in (select n_stagiaire from notation where n_module in (select n_module from module where intmod = 'sgbd I'))

WWW.NTICRIAD.NET NTIC DEV

NTIC DEV WWW.NTICRIAD.NET


8) Avant de supprimer un stagiaire, vrifier sil existe et vrifier sil a des notes.
alter PROCEDURE liste44 @num int AS BEGIN if exists (select * FROM STAGIAIRE where n_stagiaire=@num) begin If exists(select * from notation where n_stagiaire=@num) begin Delete from notation where n_stagiaire=@num print 'les notes du stagiaire numro +'+CONVERT(varchar(5), @num) +' ont t supprims' end print 'stagiaire numro ' +CONVERT(varchar(5), @num) + ' est supprim' delete from stagiaire where n_stagiaire=@num end else begin print 'le stagiaire numro ' + CONVERT(varchar(5), @num) + n''existe pas' end END 9) Procdure qui supprime une filire avec lensemble des stagiaires affects cette filire. create proc ex9 @nf char(3) As Begin If exists (select * from filiere where nomfil=@nf) begin If (select count(*) from stagiaire where n_fil in (select n_fil from filiere where nomfil=@nf)) >0 Begin delete from stagiaire where n_fil in (select n_fil from filiere where nomfil=@nf) Print 'les stagiaires de la filire '+@nf+ ' ont t supprims' end Delete from filiere where nomfil=@nf Print 'la filire '+@nf+ ' a t supprime' End Else begin Print 'la filire '+@nf+ ' n''existe pas'

WWW.NTICRIAD.NET NTIC DEV

NTIC DEV WWW.NTICRIAD.NET


End end 10) La procdure qui permet de vrifier lexistence du stagiaire et de modifier par la suite la note affecte au module SGBD II create proc ex10 @ns int, @not float As Begin If exists (select * from stagiaire where n_stagiaire=@ns) Begin If exists(select * from notation where n_stagiaire=@ns And n_module in select n_module from module where intmod=sgbd II) begin Update notation set note =@not Where n_stagiaire=@n_stagiaire And n_mod in (select n_mod from module where nommod=sgbd II) Print la nouvelle note + @not+ est affecte pour le stagiaire +@ns+dans le module sgbd II End Else Begin print ce stagiaire na pas de note dans le module sgbdII end end Else Begin Print le stagiaire nexiste pas End end

11)

Affecter une note pour un stagiaire ; vrifier lexistence du stagiaire et du module. Vrifier si le stagiaire est dj not pour ce module.

create proc ex11 @ns int, @m car(3),@not float As Begin If exists (select * from stagiaire where n_stagiaire=@ns) Begin If exists (select * from module where n_module=@m) Begin If exists (select * from notation where n_stagiaire=@ns and n_module=@m)

WWW.NTICRIAD.NET NTIC DEV

NTIC DEV WWW.NTICRIAD.NET


Begin Print le stagiaire n + convert(varchar(3),@ns+ est dj not pour le Module +@m End Else Begin Insert into notation values(@ns,@m,@not) Print la note est affecte au stagiaire End

end Else Begin Print le module nexiste pas End Else Begin Print le stagiaire nexiste pas End end

12)

supprimer les stagiaires inscrits lanne dernire et stocker les dans la table archive

if exists (select * from stagiaire where datediff(year,dateinscrip ,getdate())=1) begin select * into archive from stagiaire where datediff(year,dateinscrip ,getdate())=1 delete from stagiaire where datediff(year,dateinscrip ,getdate())=1 end else begin print aucun stagiaire end 13) Afficher les informations des stagiaires qui ont plus de deux notes.

Select * from stagiaire Where n_stagiaire in (select n_stagiaire from notation group by n_stagiaire having count(n_stagiaire)>=2)

14) Supprimer les 3 premiers stagiaires

WWW.NTICRIAD.NET NTIC DEV

NTIC DEV WWW.NTICRIAD.NET


DELETE from stagiaire Where n_stagiaire in (SELECT TOP 10 n_stagiaire FROM notation Group by n_stagiaire Order by avg(note) desc) Delete from stagiaire Where n_stagiaire in (SELECT TOP 2 n_stagiaire FROM stagiaire)

WWW.NTICRIAD.NET NTIC DEV

NTIC DEV WWW.NTICRIAD.NET


15) Supprimer les stagiaires non nots dans le module conception et modlisation DELETE stagiaire FROM (SELECT n_stagiaire FROM stagiaire where n_stagiaire not in (select n_stagiaire from notation where n_module in select n_module from module where nommod=conception et modlisation) as t1 WHERE stagiaire.n_stagiaire = t1.n_stagiaire

Delete from stagiaire where n_stg not in (select n_stg from notation where n_module in (select n_module from module where intmod=conception et modelisation)) 16) afficher dans une colonne nomme observation la valeur Echec ou rachet ou admis en fonction de la moyenne obtenue par le stagiaire create proc observation as begin SELECT 'Observation' = CASE WHEN avg(note) < 9 THEN 'Echec' WHEN avg(note)>= 9 and avg(note)< 10 THEN 'Rachet' WHEN avg(note) >= 10 THEN 'Admis' ELSE 'Erreur de formule!' END, avg(note) AS 'moyenne', n_stagiaire as 'numro stagiaire' FROM notation group by n_stagiaire ORDER BY avg(note) desc end 17) Crer une procdure compter qui permet afficher le nombre de stagiaires inscrits dans une filire donne CREATE PROCEDURE compter @fil int , @x int output AS begin select @x = count(*) from stagiaire where n_fil=@fil print le nombre de stagiaires inscrits est :+ convert(varchar(3),@x)

WWW.NTICRIAD.NET NTIC DEV

NTIC DEV WWW.NTICRIAD.NET


end GO

17) Crer une procdure nomme affecter qui permet de modifier la valeur du champ capacit en lui affectant le nombre de stagiaires inscrits Utiliser la procdure compter pour calculer le nombre de stagiaires inscrits dans la filire CREATE proc affecter @fil int as declare @nb int begin set @nb=0 exec liste @fil , @nb output update filiere set capacite=@nb where n_fil=@fil end GO 18) effectuer la mme opration pour lensemble des filires CREATE PROCEDURE iteratif1 AS declare @c int declare @n int begin select @n=select count(*) from filiere set @c=1 while @c <= @n begin exec affecter @c print la filire n+@c+ a t modifie set @c=@c+1 end end

WWW.NTICRIAD.NET NTIC DEV