0% ont trouvé ce document utile (0 vote)
40 vues8 pages

Gestion de Base de Données TP6

Ce document décrit la création d'une base de données pour la gestion d'une bibliothèque. Il contient la création des tables, l'insertion des données, des procédures stockées et des déclencheurs pour gérer les emprunts et retours d'ouvrages.

Transféré par

mine Djery
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)
40 vues8 pages

Gestion de Base de Données TP6

Ce document décrit la création d'une base de données pour la gestion d'une bibliothèque. Il contient la création des tables, l'insertion des données, des procédures stockées et des déclencheurs pour gérer les emprunts et retours d'ouvrages.

Transféré par

mine Djery
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

Binome :

LAKHDOURA Youness
LAZAR Adnane
-creation de la base de donne :
create database TP6

-creation des tables :


use TP6

create table editeur(


numedi int primary key,
nomedi varchar (50),
adredi varchar (50)
)

create table adherent(


numadh int primary key,
nomadh varchar (50),
prenomadh varchar (50),
datenaissance date
)

create table livre(


numlive int primary key ,
titrelive varchar(50) ,
nbrexemlairedisponible int ,
numedi int foreign key references editeur(numedi)
)

create table emprunt(


numemp int primary key,
datemp date,
numadh int foreign key references adherent(numadh) ,
numliv int foreign key references livre(numiv)
)

create table retour(


numret int primary key ,
dateret date,
numemp int foreign key references emprunt(numemp)
)

-insertion des valeurs :


insert into editeur values
(1,'editeur1','benimellal'),(2,'editeur2','marrakech'),(3,'editeur3'
,'rabat'),(4,'eediteur4','casa'),(5,'editeur5','casa')

insert into livre values


(2,'livre2',30,1),(3,'livre3',15,5),(4,'livre4',30,1),(5,'livre5',20
,3)

insert into adherent


values
(2,'lazar','adnane','1997-04-05'),
(3,'kadiri','mohamed','2001-03-05'),
(4,'ghanim','amine','2000-12-01')

insert into emprunt


values
(1,'2017-12-22','2','3'),
(2,'2017-08-10','1','1'),
(3,'2017-05-14','2','3'),
(4,'2017-01-20','4','2')

insert into retour values


(1,'2017-12-28','2'),
(2,'2017-08-20','1'),
(3,'2017-05-24','2'),
(4,'2017-01-30','4')

6-

a/
Create procedure q6a
as
declare @a int ,@b varchar(50) ,@c varchar (50)
declare c1 cursor
for
select l.numlive,l.titrelive, e.nomedi
from livre l , editeur e
where l.numedi=e.numedi
open c1
fetch next from c1 into @a,@b,@c
while @@FETCH_STATUS=0
begin
print'le numero du livre :'+convert(varchar(20),@a)+',son titre est
:'+@b+'.Il été édité par :'+@c
fetch next from c1 into @a,@b,@c
end
close c1
deallocate c1

exec q6a

b/
create procedure q6b
as
declare @a int ,@b varchar(50) ,@c varchar (50)
declare c2 cursor
for
select l.numlive,l.titrelive, e.nomedi
from livre l , editeur e
where l.numedi=e.numedi and l.numlive not in(
select emprunt.numliv
from emprunt
)
open c2
fetch next from c2 into @a,@b,@c
while @@FETCH_STATUS=0
begin
print'le numero du livre :'+convert(varchar(20),@a)+',son titre est
:'+@b+'.Il été édité par :'+@c
fetch next from c2 into @a,@b,@c
end
close c2
deallocate c2

exec q6b

c/

Create procedure q6c

as
select l.numlive,l.titrelive,a.numadh,a.nomadh, e.datemp

from livre l , adherent a , emprunt e


where l.numlive=e.numliv and e.numadh=a.numadh and e.numemp not in(
select r.numemp
from retour r
)

exec q6c

d/
create procedure q6d

as
select l.numlive,l.titrelive

from livre l
where l.nbrexemlairedisponible!=0

exec q6d

e/
procedure

create procedure q6e @liv varchar(50), @a int output

as
if (select l.numlive
from livre l
where l.titrelive=@liv)
in (select e.numliv
from emprunt e
)
SET @a=1
else SET @a=0

declare @b int
exec q6e 'livre2',@b output
print @b

fonction

create Function q6efun(@liv varchar(50)) returns int


as
begin
declare @a int
if (select l.numlive
from livre l
where l.titrelive=@liv)
in (select e.numliv
from emprunt e
)
set @a=1
else set @a='0'
return @a
end

declare @i int
set @i=dbo.q6efun('livre2')
print @i

f/
procedure :

create procedure q6f @c varchar(50) output as


declare @a int ,@b int
declare @tab table (nombrelivre int , numedit int)
insert into @tab
select count(numlive) , numedi
from livre
group by numedi

declare c cursor for select * from @tab


order by nombrelivre desc
open c
fetch next from c into @a,@b

set @c= (select e.nomedi


from editeur e
where e.numedi=@b)
close c
deallocate c

declare @x varchar(50)
exec q6f @x output
print @x

function :

create function q6ffun()


returns varchar(50)
as
begin
declare @a int ,@b int ,@c varchar(50)
declare @tab table (nombrelivre int , numedit int)
insert into @tab
select count(numlive) , numedi
from livre
group by numedi

declare c cursor for select * from @tab


order by nombrelivre desc
open c
fetch next from c into @a,@b

set @c= (select e.nomedi


from editeur e
where e.numedi=@b)
close c
deallocate c
return @c
end

print dbo.q6ffun()

7- TRIGGERS :

a/
create trigger trga
on livre
for insert
as
begin
declare @a int
set @a=(select inserted.nbrexemlairedisponible from inserted)
if @a<=0
begin
Raiserror('on peut pas ajouter car le nombre d''exemplaire <=
0',15,120)
Rollback
end
end

b/

create trigger trgb


on adherent
for insert as
begin
declare @d date
set @d=(select dateNaissance from inserted)
if @d>'2010-12-12'
begin
raiserror ('age est inferieur à 7',1,16)
rollback
end
end

c/

create trigger trgc on emprunt


for update
as
begin
Raiserror('on peut pas ajouter',15,120)
rollback
end

d/

create trigger trgd


on emprunt
for insert
as
begin
declare @a int
set @a=(select numLiv from inserted)
update livre set
nbrexemlairedisponible=nbrexemlairedisponible-1
where livre.numlive=@a
end

e/

create trigger trge


on retour
for insert
as
begin
update livre set nbrexemlairedisponible=nbrexemlairedisponible+1
where livre.numlive in (select numLiv from emprunt
where numEmp in (select numEmp from inserted))
end

f/

create trigger trgf


on emprunt
for delete
as
begin
if exists (select * from deleted where numEmp in (
select numEmp from retour ))
begin
Raiserror('on peut pas supprimer',15,120)
rollback
end
else
begin
update livre set
nbrexemlairedisponible=nbrexemlairedisponible+1
where livre.numlive in
(select numLiv from deleted)
print 'le livre est modifié'
end
end

g/

create trigger trgg


on emprunt
for update
as
begin
declare @a int, @b int
set @a=(select numLiv from deleted)
set @b=(select numLiv from inserted)
if @a!=@b
begin
update livre set
nbrexemlairedisponible=nbrexemlairedisponible-1
where livre.numlive=@b
update livre set
nbrexemlairedisponible=nbrexemlairedisponible+1
where livre.numlive=@a
end
end

Vous aimerez peut-être aussi