Vous êtes sur la page 1sur 8

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