Vous êtes sur la page 1sur 4

1

EXERCICE 1 : Fonction scalaire


Ecrire une fonction qui retourne le nombre d’auteurs par pays.

NB : On utilise içi la table « Auteurs » de la base de données « PUBLI »

Solution 1 : Fonction scalaire


CREATE FUNCTION [dbo].[nbre_auteur_pays]
(
@pa nvarchar(255)
)
RETURNS int
AS
BEGIN

DECLARE @nombre int;

SELECT @nombre=count(*) from auteur WHERE pays=@pa


RETURN @nombre

END

EXERCICE 2 : Fonction table en ligne


1) Ecrire une fonction qui retourne le titre, son type et son prix pour un titre
donné
2) Ecrire une fonction qui retourne le titre, son type et son prix pour un type
donné

NB : On utilise içi la table « Titres » de la base de données « PUBLI »

Solution 2 : Fonction table en ligne


1)
CREATE FUNCTION [dbo].[titre_prix]
( @id nvarchar (255))
RETURNS TABLE
AS
RETURN (

SELECT titre, [t type], prix FROM titres WHERE


id_titre=@id
)
2

2)

CREATE FUNCTION [dbo].[type_prix]


( @it nvarchar (255))
RETURNS TABLE
AS
RETURN (

SELECT titre, [t type], prix FROM titres


WHERE [t type] =@t
)

Exercice 3: (fonctions définies par l’utilisateur : scalaire, table)


1. Ecrire une fonction qui accepte en paramètre un numéro de
département et qui retourne le nombre d’employés travaillant au sein
de ce département. Cette fonction portera le nom de nombreEmployes
et le paramètre sera nommé numerodep.

2. Exécuter la fonction: nombreEmployes, respectivement pour les


départements :10,20,30

3. Ecrire une fonction table en ligne qui retourne la liste de tous les
employés recrutés avant une année donnée en paramètre. Elle affiche
les champs (numéro de l'employé, son nom, sa fonction ainsi que le
numéro du département auquel il appartient). La fonction portera le
nom employesAnciensLigne
4. Exécuter la fonction: employesAnciensLigne pour l’année :1993
5. Réécrire la dernière fonction comme table multi-instructions. La
fonction portera le nom employesAnciensMulti.
6. Exécuter la fonction: employesAnciensLigne pour l’année :1991

Solution3 :

1. La fonction nombreEmployes :

CREATE FUNCTION nombreEmloyes (@numerodep smallint )

RETURNS int

AS

BEGIN

DECLARE @nombre int;


3

SELECT @nombre=count(*)

FROM Emp WHERE n_dept= @numerodep;

RETURN @nombre;

END;

2. Exécution de la fonction nombreEmployes :

select dbo.nombreEmloyes(10) effectif, 10 departement ;

select dbo.nombreEmloyes(20) effectif, 20 departement ;

select dbo.nombreEmloyes(30) effectif, 30 departement ;

3. La fonction : employesAnciensLigne :
 Avec une seule instruction :

CREATE FUNCTION employesAnciensLigne (@an


smallint)RETURNS TABLE

AS

RETURN ( SELECT num, nom, fonction, n_dept FROM Emp

WHERE DATEPART(year, embauche)<@an)

4. Exécution de la fonction : employesAnciensLigne

select * from employesAnciensLigne(1993)

5. La fonction : employesAnciensMulti :

 Avec plusieurs instructions et déclaration de la structure de la table :

CREATE FUNCTION employesAnciensMulti (@an


smallint)RETURNS @detailEmployes TABLE(numE smallint,

NomE nvarchar(80),
4

fonctionE nvarchar(50),

n_deptE smallint)

AS

BEGIN

INSERT INTO @detailEmployes(numE,nomE,fonctionE, n_deptE)

SELECT num, nom, fonction, n_dept FROM Emp

WHERE DATEPART(year, embauche)<@an

RETURN;

END;

6. Exécution de la fonction : employesAnciensMulti

select * from employesAnciensMulti (1991)

Vous aimerez peut-être aussi