• Aucun résultat trouvé

/create type t_ressource

N/A
N/A
Protected

Academic year: 2022

Partager "/create type t_ressource"

Copied!
3
0
0

Texte intégral

(1)

sqlrev.sql

/*Création de l'utilisateur et accord de privilèges*/

create user sql3bib identified by psw;

grant all privileges to sql3bib;

/*connexion avec sql3bib*/

connect sql3bib/psw

/*création des types t_telephone et t_adresse*/

create type t_telephone as table of varchar(12);

/

create type t_adresse as object (rue varchar(200), codepostal number(5), ville varchar(100));

/

/*création des types incomplets*/

create type t_personne;

/create type t_ressource;

/

create type t_livre;

/

create type t_disque;

/

create type t_abonne;

/

create type t_auteur;

/

create type t_emprunt;

/

/* Création des types nécessaires aux associations les tables imbriquées des références*/

create type t_set_ref_ressource as table of ref t_ressource;

/

create type t_set_ref_auteur as table of ref t_auteur;

/

create type t_set_ref_emprunt as table of ref t_emprunt;

/

/*mise à jour des types*/

create or replace type t_personne as object (numero integer, nom varchar(50), prenom varchar(50)) not final;

/

create or replace type t_auteur under t_personne (auteur_ressource t_set_ref_ressource);

/

create or replace type t_abonne under t_personne (dateinsc date, telephones t_telephone, adresse t_adresse, abonne_emprunt t_set_ref_emprunt);

/

create type t_editeur as object (nom varchar(50), adresse t_adresse);

/

create or replace type t_ressource as object (ISBN integer, titre varchar(50), parution date, ressource_editeur ref t_editeur, ressource_emprunt

t_set_ref_emprunt, ressource_auteur t_set_ref_auteur) not final;

/

create or replace type t_livre under t_ressource (numedition integer, nbrpage integer);

/

create or replace type t_disque under t_ressource (support varchar(3), nbrpiste integer);

/

create or replace type t_emprunt as object (numemprunt integer, date_emprunt date, date_retour date, emprunt_abonne ref t_abonne, emprunt_ressource ref t_ressource);

/

/*creation des tables*/

create table editeur of t_editeur(primary key(nom));

create table personne of t_personne(primary key(numero));

create table ressource of t_ressource (primary key(ISBN), foreign key(ressource_editeur) references editeur)

nested table ressource_emprunt store as table_ressource_emprunt, nested table ressource_auteur store as table_ressource_auteur;

create table emprunt of t_emprunt (primary key(numemprunt),foreign Pge p

(2)

sqlrev.sql

key(emprunt_abonne) references personne, foreign key(emprunt_ressource) references ressource);

/*insertion*/

/*insertion d'un editeur*/

insert into editeur values ('eyrolles', t_adresse('61 Boulevard Saint-Germain', '75005', 'Paris'));

/* insertion d'un auteur sans ressources écrites*/

insert into personne values (t_auteur('1','Gardarin','George' ,t_set_ref_ressource()));

/* insertion d'un abonné sans téléphone et sans emprunts*/

insert into personne values (t_abonne('2', 'Nadji','Ahmed','',t_telephone(), t_adresse('5 Boulevard ahmed ouaked', '16105', 'Alger'), t_set_ref_emprunt()));

insert into personne values (t_abonne('3', 'Ladimi','Nadia','',t_telephone(), t_adresse('5 Boulevard ahmed ouaked', '16105', 'Alger'), t_set_ref_emprunt()));

/*insertion d'une ressource de type livre ISBN 2212081286 'Bases de données avancées' de nombre pages 255 et numéro édition 2 et date de parution 01/02/1991 écrite par george grdarin édité par eyrolles */

insert into ressource values(t_livre('2212081286', 'Bases de données avancées', '01/02/1991', (select ref(e) from editeur e where e.nom='eyrolles'),

t_set_ref_emprunt() , t_set_ref_auteur((select treat(ref (a) as ref t_auteur) from personne a where a.nom='Gardarin' and a.prenom='George')),'2', '255'));

/* Mettre à jour les liens inverse pour auteur*/

insert into table (select treat(value(a) as t_auteur).auteur_ressource from personne a where a.nom='Gardarin' and a.prenom='George')

(select ref(r) from ressource r where r.isbn='2212081286');

/*insertion dans emprunt, le livre base de donnée avancées est emprunté par nadji ahmed le 01/04/2017 et sera retourné le 15/04/2017*/

insert into emprunt values('1','01/04/2017','15/04/2017',(select treat(ref (ab) as ref t_abonne) from personne ab where ab.nom='Nadji' and ab.prenom='Ahmed'), (select ref(r) from ressource r where r.isbn='2212081286'));

/*Mettre à jour les liens inverse ressource et abonné*/

insert into table (select treat(value(a) as t_abonne).abonne_emprunt from personne a where a.nom='Nadji' and a.prenom='Ahmed')

(select ref(e) from emprunt e where e.numemprunt='1');

insert into table (select r.ressource_emprunt from ressource r where r.isbn='2212081286')

(select ref(e) from emprunt e where e.numemprunt='1');

/*insertion dans emprunt, le livre base de donnée avancées est emprunté par Ladimi Nadia le 01/04/2020 et sera retourné le 15/04/2020*/

insert into emprunt values('2','01/04/2020','15/04/2020',(select treat(ref (ab) as ref t_abonne) from personne ab where ab.nom='Ladimi' and ab.prenom='Nadia'), (select ref(r) from ressource r where r.isbn='2212081286'));

/*Mettre à jour les liens inverse ressource et abonné*/

insert into table (select treat(value(a) as t_abonne).abonne_emprunt from personne a where a.nom='Ladimi' and a.prenom='Nadia') (select ref(e) from emprunt e where e.numemprunt='2');

insert into table (select r.ressource_emprunt from ressource r where r.isbn='2212081286') (select ref(e) from emprunt e where e.numemprunt='2');

/*5. On complète le type abonné avec la méthode MesEmprunts retournant l’ensemble (sans doublons) de ressources empruntées par cet abonné.*/

/* ajout de la méthode*/

create type t_set_ressource_emprunt as table of t_ressource;

/

alter type t_abonne

ADD MEMBER FUNCTION MesEmprunts RETURN t_set_ressource_emprunt cascade;

CREATE OR REPLACE TYPE BODY t_abonne

AS MEMBER FUNCTION MesEmprunts RETURN t_set_ressource_emprunt IS

empruntsabonne t_set_ressource_emprunt;

Begin

Select CAST (MULTISET(

select distinct deref(deref(value(e)).emprunt_ressource) from personne p, table( treat (value(p) as

t_abonne).abonne_emprunt) e

where p.numero=self.numero)

as t_set_ressource_emprunt) into empruntsabonne

from dual;

Pge p

(3)

sqlrev.sql return empruntsabonne;

end;

End;

/

/*requêtes*/

/*a. Quels sont les livres écrits par « George Gardarin» ?*/

select deref(value(r))

from personne p, table(treat(value (p) as t_auteur).auteur_ressource) r where p.nom='Gardarin' and p.prenom='George';

/*b. Quels sont les abonnés qui ont emprunté au moins une fois le même livre

? Afficher des couples formés des noms des abonnés.*/

Select p1.nom, p2.nom

From personne p1, table(treat(value (p1) as t_abonne).abonne_emprunt) e1, personne p2, table(treat(value (p2) as t_abonne).abonne_emprunt) e2

Where p1.numero>p2.numero and

deref(value(e1).emprunt_ressource).ISBN=deref(value(e2).emprunt_ressource).ISBN;

/*c. Quels sont les abonnés qui ont empruntés tous les livres de l’auteur « George Gardarin» ?*/

select p.numero

from personne p, table(treat(value (p) as t_abonne).abonne_emprunt) e, table(deref(deref(value(e)).emprunt_ressource).ressource_auteur) a

where deref(value(a)).nom='Gardarin' and deref(value(a)).prenom='George' having

count(distinct(deref(value(e).emprunt_ressource).ISBN))

=

(select count(distinct(deref(value(r)).ISBN))

from personne pp, table(treat(value (pp) as t_auteur).auteur_ressource) r where pp.nom='Gardarin' and pp.prenom='George')

group by p.numero;

Pge p

Références

Documents relatifs

Materialien : - Alle unsere Produkte sind aus Holzwerkstoffen hergestellt und klassifiziert in E1 gemäß der Norm EN 13986, die eine Formaldehydgehalt von weniger als oder

La concienciación acerca de los efectos nocivos para la salud derivados del consumo de ácidos grasos trans, así como de los niveles de exposición a ácidos grasos trans de producción

Increasing awareness of the negative health impact of TFA consumption – and levels of exposure to industrially produced TFA – can help to advance the policy changes and

؛اهمدقي نمو ةطشنلأا ذيفنتل ةبولطملا دراوملا › .زرحملا مدقتلا عبتتو ةطشنلأا دصرل تارشؤم › رثلأاب ةيعوتلا يف دعاسي نأ لصاوتلل نكمي ثيح ،قيرطلا ةطيرخ يف

event idevent INT title VARCHAR(50) content LONGTEXT place VARCHAR(50) start_at DATE finish_at DATE created_at DATETIME updated_at DATETIME security_statut

Instead, we can advocate to do away with unnecessary requirements such as sick notes and some forms, and we can seek ways to have uninsured services that are essential to

Vous pouvez ajouter une quantité d’enregistrements à un document de source de données pour imprimer plusieurs copies d’un enregistrement lors de l'envoi de votre design vers un

document apporte à l’élève pour progresser dans la problématique et mieux s’approprier la notion).