You are on page 1of 3

*******************************************

create type T_pays as object(codeP VARCHAR2(2),nomP VARCHAR2(50),population


NUMBER(10),superficie NUMBER(8),capitale VARCHAR2(30));
create type T_controle as object(numctrl NUMBER(6), Typee VARCHAR2(15),Datectrl
date, resultat char(1));
create type tab_controle as table of T_controle;
create type T_Athlete as object(numdossard NUMBER(5), nom VARCHAR2(20), prenom
VARCHAR2(20),controle tab_controle );
create type tab_Athlete as table of T_Athlete;
create type T_equipe as object(numeq NUMBER(4),codePays ref T_pays,sport
VARCHAR2(15),Athlete tab_Athlete );

create table equipe of T_equipe(


constraint pk_equip primary key(numeq))
nested table Athlete store as stockage_athlete
(nested table controle store as stockage_controle);

create table pays of T_pays


(constraint pk_pays primary key(codeP));

alter table equipe add constraint fk_pays FOREIGN key(codeP) REFERENCES pays;
alter table equipe add constraint fk_p foreign key (codePays) references pays;

alter table equipe add constraint uniq_e CHECK (codePays is not null);
alter table pays add constraint uniq_no unique(nomP);

insert into pays values(T_pays('us','Etats_unis',328,9833517,'washingtone'));


insert into pays values(T_pays('fr','France',67,632734,'Paris'));
insert into pays values(T_pays('uk','royaume_uni',65,246690,'londres'));

INSERT INTO equipe VALUES(1,(select ref(p) from pays p where p.codeP='us'),'100


mètres',
tab_Athlete(T_Athlete(1,'Green','Maurice',
tab_controle(T_controle(1,'Sanguin','03-11-05','N'))),
T_Athlete(2,'Lewis','Carl', tab_controle(T_controle(2,'Sanguin','03-11-
05','N')))));

INSERT INTO equipe VALUES (2,(select ref(p) from pays p where


p.codeP='us'),'Basket',
tab_Athlete(T_Athlete(23,'Jordan','Michael',tab_controle(T_controle(3,'Urinaire','0
3/11/05','N'))),
T_Athlete(8,'Bryant','Kobe',tab_controle(T_controle(4,'Urinaire','03/11/05','N'))),
T_Athlete(34,'Oneal','Shaquille',tab_controle(T_controle(5,'Urinaire','03/11/05','N
')))));

INSERT INTO equipe VALUES(3,(select ref(p) from pays p where p.codeP='uk'), '100
metres',
tab_Athlete(T_Athlete(4, 'Sphynx', 'Le',tab_controle(T_controle(6, 'Sanguin',
'03/11/2005', 'P'),
T_Controle(7, 'Sanguin',
'04/11/2005', 'N')))));

delete from equipe e

where e.numeq=1;
SELECT e.sport, a.Nom, a.Prenom
FROM equipe e, TABLE(e.Athlete) a;

SELECT count(*)
FROM TABLE (SELECT a.controle
FROM TABLE (SELECT e.Athlete
FROM equipe e ) a

WHERE a.resultat = 'p');

SELECT *
FROM TABLE (SELECT a.controle
FROM TABLE (SELECT e.Athlete
FROM equipe e WHERE e.numEQ = 3) a
WHERE a.numdossard = 4);

SELECT a.Nom, a.Prenom, COUNT(*)


FROM equipe e, TABLE (e.Athlete) a, TABLE (a.controle) c
WHERE c.Resultat='P' GROUP BY a.Nom, a.Prenom;

SELECT a.Nom, a.Prenom, max(c.DateCtrl)


FROM equipe e, TABLE (e.Athlete) a, TABLE (a.controle) c

GROUP BY a.Nom, a.Prenom;

SELECT a.Nom, a.Prenom, COUNT(*)


FROM equipe e, TABLE (e.Athlete) a, TABLE (a.controle) c

WHERE c.Resultat='P' GROUP BY a.Nom, a.Prenom;

SELECT a.Nom, a.Prenom, max(c.DateCtrl)


FROM equipe e, TABLE (e.Athlete) a, TABLE (a.controle) c

GROUP BY a.Nom, a.Prenom;

SELECT e.NumEq, e.CodePays, e.Sport


FROM equipe e, TABLE (e.Athlete) a, TABLE (a.controle) c
GROUP BY e.NumEq, e.CodePays , e.Sport
HAVING COUNT(*) = (SELECT max(COUNT(*))
FROM equipe ee, TABLE (ee.Athlete) aa, TABLE (aa.controle) cc
GROUP BY ee.NumEq);

select e.sport, count(c.numctrl)


FROM equipe e, table(e.Athlete)a,table(a.controle)c
group by e.SPORT
having count(*)=(select min(count(*))
FROM equipe e, table(e.Athlete)a,table(a.controle)c
group by e.SPORT);

INSERT INTO TABLE (SELECT e.Athlete


FROM equipe e
WHERE e.NumEq=6)
VALUES (T_Athlete(30, 'Pietrus', 'Michael', tab_controle()));
INSERT INTO TABLE (SELECT a.controle
FROM equipe e, TABLE (e.Athlete) a
WHERE e.NumEq=6 AND a.numdossard=30)
VALUES(15, 'Urinaire', '23/01/2007', 'N');

INSERT INTO TABLE (SELECT a.controle


FROM equipe e, TABLE (e.Athlete) a
WHERE e.NumEq=6 AND a.numdossard=30)
VALUES(16, 'sanguin', '23/01/2007', 'N');

UPDATE TABLE (SELECT a.controle


FROM equipe e, TABLE (e.Athlete) a
WHERE e.NumEq = 4 AND a.numdossard = 6)c
set c.resultat='N'
WHERE c.Datectrl < '04/11/2005';

select e.numeq, count(*)


FROM equipe e, table(e.Athlete)a
group by e.numeq
having count(*)=(select max(count(a.numdossard))
FROM equipe e, table(e.Athlete)a
group by e.numEQ);

select a.numdossard,a.nom,a.prenom,count(*)
from equipe e, table(e.Athlete)a,table(a.controle)c
group by a.numdossard,a.nom,a.prenom
having count(*)=(select max(count(a.numdossard))
from equipe e,table(e.Athlete)a,table(a.controle)c
group by a.numdossard,a.nom,a.prenom);

select c.Typee,c.resultat
from equipe e, table(e.Athlete)a ,table(a.controle)c
where e.codePays.codeP='us';

select e.NUMEQ, a.numdossard,a.nom,a.prenom,count(distinct c.typee)


from equipe e, table(e.Athlete)a,table(a.controle)c
group by e.numeq,a.numdossard,a.nom,a.prenom
having count(distinct c.typee)=2;

select a.numdossard, a.nom, a.prenom, count(c.numctrl)


from equipe e, table(e.Athlete)a,table(a.controle)c
where c.resultat='N' and e.codePays.population=(select max(population) from pays
p);

delete from table( select a.controle


from equipe e, TABLE(e.ATHLETE)a
where e.NUMEQ=3)c
where c.resultat='P';

You might also like