You are on page 1of 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 where intitulmod=mtier et
formation)
END

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

You might also like