Vous êtes sur la page 1sur 5

Zeineb Houman 2GIA

Devoir SGBD
Exercice 1 :
1.
create or replace view auteur_BD as
select Distinct(Au.numaut), Au.nomaut
from Auteurs Au ,Motscles M ,Avoir A,Ecrire E
Where Au.numaut=E.numaut
and M.idmotcle=A.idmotcle
and E.numlivre=A.numlivre

and M.titre='BD NoSQL' ;


2.
select numaut,nomaut
from auteur_BD a
where
(select count(e.numlivre) from ecrire e where e.numaut=a.numaut) > 3;

3.
select ab.numaut, ab.nomaut
from auteur_BD ab
where ab.numaut in (select au.numaut from Auteurs au ,Motscles m , Avoir a,
ecrire e
Where au.numaut=e.numaut and m.idmotcle=a.idmotcle and
e.numlivre=a.numlivre
and m.titre='MongoDB') ;
4.
Create or replace view controle_miseAjour as
select * from livres WHERE livres. annee<=2020
WITH CHECK OPTION;

Exercice 2 :

1.
create or replace procedure proc is
Cursor curs is select Cl.numCl, Cl.nomCl, count(co.Nordre) as nc
from commande Co, client Cl , livraison L
where CL.numCl=Co.numCl
and L.Nordre=Co.Nordre
group by cl.numCl , cl.nomCl;
type tab is table of curs%rowtype index by binary_integer;
t tab ;
rec curs%rowtype;
begin
open curs;
fetch curs into rec;
while curs%found loop
t(curs%rowcount). numCl:=rec. numCl;
t(curs%rowcount). nomCl:=rec.nomCl;
t(curs%rowcount).nc:=rec.nc;
fetch curs into rec;
end loop;
close curs;

for i in t.first..t.last loop


dbms_output.put_line('le num est: ' || t(i).numCl || ' le nom est: '|| t(i).nomCl
|| ' Nombre de livraision ' || t(i).nc) ;
end loop;
end;
/

2.
create or replace function verif_dvd (num1 client.numCL%type, num2
client.numCL%type) return number is
cursor c1 is
select distinct(NDVD)
from Ligne_com L, client CL , commande C
where L.Nordre=C.Nordre and CL.numCL=C.numCL and CL.numCL=num1 ;
cursor c2 (numDVD Ligne_com.NDVD%type) is
select distinct(L.NDVD)
from Ligne_com L, client CL , commande C
where L.Nordre=C.Nordre
and CL.numCL=C.numCL
and CL.numCL=num2
and numDVD=L.NDVD;
i number:=0;
j number:=0
n1 number; /*n1 pour compter le nombre de ligne dans c1*/
n2 number; /*n2 pour compter le nombre de ligne dans c2*/
begin
select count(distinct(NDVD) into n1
from Ligne_com L, client CL , commande C
where L.Nordre=C.Nordre
and CL.numCL=C.numCL
and CL.numCL=num1 ;

select count(distinct(NDVD) into n2


from Ligne_com L, client CL , commande C
where L.Nordre=C.Nordre
and CL.numCL=C.numCL
and CL.numCL=num2 ;
/*si chaque ligne de curseur c1 ne se trouve pas dans c2 retourner 0 */
/* i et j sont des compteurs pour compter le nombre des éléments en commun
respectivement dans c1 et c2 */
for x in c1 loop
i:=i+1;
for y in c2(x.NDVD) loop
if (c2%NOTFOUND) then return 0;
end if;
j:=j+1;
end loop;
end loop;

if(i <> j) OR (n1<>n2) then return 0;


end if;
return 1;
end verif_dvd;
/

Vous aimerez peut-être aussi