0% ont trouvé ce document utile (0 vote)
9 vues14 pages

Révision SQL Server : Procédures et Fonctions

Le document présente un TP de révision sur SQL Server pour l'année universitaire 2022/2023, axé sur la programmation de bases de données avec Transact-SQL. Il inclut des exercices pratiques sur la création de procédures stockées et de fonctions pour gérer des données relatives à des employés, des opérations et des voitures. Les questions portent sur l'affichage des employés, le calcul de leur ancienneté, l'augmentation de leur salaire et le calcul de leur âge.

Transféré par

yassmineelmir5
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
9 vues14 pages

Révision SQL Server : Procédures et Fonctions

Le document présente un TP de révision sur SQL Server pour l'année universitaire 2022/2023, axé sur la programmation de bases de données avec Transact-SQL. Il inclut des exercices pratiques sur la création de procédures stockées et de fonctions pour gérer des données relatives à des employés, des opérations et des voitures. Les questions portent sur l'affichage des employés, le calcul de leur ancienneté, l'augmentation de leur salaire et le calcul de leur âge.

Transféré par

yassmineelmir5
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

TP

TP : Révision

Année Universitaire 2022/2023

TP SQL Server.
TP : Révision Requêtes SQL+Transact_SQL+
Correction

Partie II : Programmation BD Transact_SQL.

Reprenez la même Base de Données Gestion Voiture et programmer les Procédures Stockées
et les fonctions suivantes. Partie II : Programmation BD Transact_SQL.
Client(Cin, Nom_Prenom, Profession, Adresse, Ville, Tel)
Opération(Numéro, Date_Operation, Nbre_Jour, Prix_Unitaire, Avance, Réglé, #CIN, #Ma-
tricule)
Voiture(Matricule, Marque, Type, Nbre_Chevaux, Disponible)
Employé(Cin, Nom_Prenom, Adresse, Date_Naissance, Date_Recrutement, Grade, Salaire, #Id-
Service)
Service(Id, Nom, #IdVille)
Ville(Id, Nom)

Travail à faire :

 Q1) Écrire un programme/ requête qui permet d'acher les employé.


 Q2)Écrire un programme/ requête qui calcule le nombre des employés dans un service
donné en paramètre.
 Q3) Écrire une procédure qui permet d'acher les employé.
 Q4)Écrire une procédure qui calcule le nombre des employés dans un service donné en
paramètre.
EMSI Casablanca A.U 2022/2023.
 Q5) Écrire une fonction qui retourne les noms et prénoms des employés avec les noms
de service auxquels ils appartiennent.
 Q6) Écrire une fonction qui calcule l'ancienneté d'un employé.
 Q7) Écrire une procédure qui augmente le salaire d'un employé selon ancienneté.
 plus de 10 ans 20%
 moins de 10 ans 15%
 Q8) Écrire une fonction qui calcule l'age d'un employé.
 Q9) Écrire une procédure qui calcule l'age et l'ancienneté des employés.

Correction complète

3
Partie II : Programmation BD SQL Server
--Q1 :
--Ecrire un programme ou une requête qui affiche les employés

--Réponse 1 :
Begin
Select *
From employé;
End;

--Solution avec curseur

Declare --declaration
C cursor for (select *
From employé);
Begin
Open C;--ouverture
Fetch next from C --fetcher la premiere ligne
While (@@fetch_status=0)--fetch
Begin
Fetch next from C;
End
Close C;--fermer le curseur
Deallocate C;--liberer le curseur
End

--Utiliser un curseur pour afficher les noms prénoms et les salaires des employés.

----Réponse 2 :
Declare --declaration
C cursor for (select [nom prenom], salaire
From employé);
Declare
@Sal money,
@Np varchar (20);
Begin
Open C;--ouverture
Fetch next from C into @Np, @Sal; --fetcher la premiere ligne
While (@@fetch_status=0)--fetch
Begin
Print ‘l’’employé ‘+@Np+ ‘a le salaire ‘+ cast(@Sal as varchar) ;
Fetch next from C into @Np, @Sal;
End
Close C;--fermer le curseur
Deallocate C;--liberer le curseur
End
--Q2
--Ecrire un programme / une requete qui calcule le nombre des employés.

--Reponse 2
Begin
Select count(*) as [nbre employés]
From employé;
End

--Autre reponse
Declare
@nbre int;
Begin
Select @nbre=count(*) as [nbre employés]
From employé;
Print ‘le nombre des employés est :’+ cast(@nbre as varchar) ;
end

--Proposition
--Calculer l’ancienneté d’une opération utiliser la table opération getdate()-dateoper
--faire avec fonction
--fonction table pour calculer l’ancienté a toutes les operations de location

--1—création:
create function calculanc()
returns table
return(select DATEDIFF(year, dateoper, getdate()) as ancienté
from operation)
end
--2—execution :
select * from calculanc();
--fonction scalaire pour calculer l’ancienté a une operation de location

--1—création:
create function calculancienty(@num int)
returns int
as
begin
declare
@anc int
select @anc=DATEDIFF(year, dateoper, getdate())
from opération
where numéro=@num
return @anc
end
--2—execution :
select calculancienty(1)
---------------------------------------------------------------------------------------------------------
---utiliser un curseur + procedure
--1 creation
Create procedure p_anc
as
Declare --declaration
C cursor for (select num
From operation);
Declare
@num int,
@anc int;
Begin
Open C;--ouverture
Fetch next from C into @num; --fetcher la premiere ligne
While (@@fetch_status=0)--fetch
Begin
@anc =select [Link](@num) ;
Print ‘l’’ operation ‘+cast(@num as varchar)+ ‘a depassé‘+ cast(@anc as
varchar) +’ ans d’’ancienté’;
Fetch next from C into @num
End
Close C;--fermer le curseur
Deallocate C;--liberer le curseur
End
--2 execution
Execute p_anc
-- les procedures stockées+ les fonctions+curseurs

--Q3: Ici, on utilise une procédure stockée normale(sans parametres)


--(sans parametres), on va creer cette procedure dans

--le schema dbo

--snytaxe

--1--creation

--create procedure nomprocedure

--as

--begin

--traitement

--end

--2--execution

--execute nomprocedure

--1--creation

create procedure raffichemployé

as

begin

select * from employé;

end

--Autre solution

create procedure raffichemployé

as

declare

C cursor for (select * from employé);

Begin
Open C;

Fetch next from C;

While(@@fetch_status=0)

Begin

Fetch next from C;

End

Close C;

Deallocate C;

end

--2-- execution

execute affichemployé

---------------------------------------------------------------------------------------------------------
--Q4: programme 4
--Procedure stockée avec parametres entrée

--@id int

--snytaxe

--1--creation

--create procedure nomprocedure(@nomparametres type)

--as

--begin

--traitement en utilisant le parametres @nomparametres

--end

--2--execution

--execute nomprocedure valeurdeparametres

--1--creation

create procedure calculemployé(@id int)

as

begin

select COUNT(*) from employé where Idser=@id;


end

--Solution 2:

create procedure calculemployé(@id int)

as

declare

@nbre int;

begin

select @nbre=COUNT(*) from employé where Idser=@id;

print ‘le nombre des employés est: ‘+ cast(@nbre as varchar) ;

end

--2--execution

execute calculemployé 1

--Q5: programme 5
--une fonction table retourne plusieurs valeurs ou le resultat d'une requete select qui va retourner
une table

--syntaxe

/*

--1--creation

create function nomfonction(parameters input)

retruns table

return (requete de selection);

--2-- execution

select * from nomfct(parameters input)

*/

--1 creation

create function affichemployéservice()

returns table

return(select e1.[nom prenom], [Link]

from [Link]é e1, [Link] s

where [Link]=[Link]);
*/

--execution

select *

from affichemployéservice()

--------------------------------------

--Q6: programme 6: une fct scalaire : la fonction scalaire retourne une seule valeur.

--qui calcule l'ancienté d'un employé

--son cin est passé en parametres input

---------------------------------------

--select DATEDIFF(year,date_recrutement,getdate()) as ancienté

--from employé where cin=@cin;

--select * from employé

-----------------------------------------

--1-- syntaxe

/*

create function nomfct(parametres d'entree)

returns type de retour(int, varchar,....)

as

begin

declare

@nomvariableretour type de retour

begin

select @nomvariableretour=........

return @nomvariableretour;

end

--2-- execution

select [Link](parameters)--Obligatoire

print [Link](parameters)

*/

--------------------------------------
--1--creation

create function calculanc(@cin varchar(20))

returns int

as

begin

declare

@anc int

select @anc=datediff(year, date_recrutement, getdate())

from [Link]é

where cin=@cin

return @anc;

end

--2--execution-------------------------

--select [Link]('A123456')

--print [Link]('A123456')

---------------------------------------------------------------------------------------------------------------------------

--Q7 --procedure avec parametres input


---------------------------------------

--La procedure augmentesaliare va appeler

--la fonction calculanc pour calculer

--l'ancienté

--1--creation

create procedure augmentesalaire(@cin varchar(10))


as
declare
@anc int;
begin
select @anc=calculanc(@cin)
if (@anc>10)
begin
update employé set salaire=salaire*1.20
where cin=@cin
end
else
begin
update employé set salaire=salaire*1.15
where cin=@cin
end
end
--2—execution
execute augmentesalaire 'A123456'
-------------------------------------------------------------------------------------------------------------------------------------

--Q8: function scalaire qui retourne l’age d’un employé


--1—création:

create function calculage(@cin varchar(10))

returns int

as

begin

declare

@age int

select @age=DATEDIFF(year, date_naissance, getdate())

from employé

where cin=@cin

return @age

end

--2—execution :

select calculage('A123456')

--------------------------------------------------------------------------------------------------------------------------------------

--Q9
--Procedure normale sans parametres qui calcule l’age et l’ancienté des employés en utilisant un --
curseur

--1--creation

create procedure calculancageemp

as

declare

@anc int

@age int ,

@cin varchar(20),

@nomp varchar(20)

declare c1 cursor for (select [nom prenom], cin from employé)

begin

open c1

fetch next from c1 into @nomp, @cin;

while(@@FETCH_STATUS=0)

begin

select @anc=calculanc(@cin)

select @age=alculage(@cin)

print 'l''employé'+@nomp+'a l''age'+convert(varchar,@age)+'avec ancienté'+cast(@anc as varchar)

fetch next from c1 into @nomp, @cin;

end

close c1

deallocate c1

end

--2--execution

Execute calculancageemp

Vous aimerez peut-être aussi