Académique Documents
Professionnel Documents
Culture Documents
TP1 : SQL3/Oracle
EXERCICE 1
L'on souhaite réaliser une base de données permettant de gérer tous les relais Wifi sur un site
d'entreprise. Chaque relais est identifié par une coordonnée géographique (représentée par une
chaîne de caractère) et fait référence à un modèle. On associe également à chaque relais son prix
d'achat. Chaque modèle est décrit par une marque et un type et possède une puissance.
1. Proposez une implémentation RO SQL3 sous Oracle exploitant les tables objets. Vous
proposerez un MCD préalablement pour vous aider.
CREATE TYPE ModeleT AS OBJECT ( type varchar(25), marque varchar(25),
puissance number );
CREATE TABLE Modele OF ModeleT ( PRIMARY KEY (type) );
CREATE or replace TYPE RelaisT AS OBJECT ( id number, coo varchar(11), prix number,
modele REF ModeleT );
CREATE TABLE Relais OF RelaisT ( PRIMARY KEY (id), modele NOT NULL, SCOPE FOR
(modele) IS Modele
• La puissance du relais 1
SELECT r.modele.puissance
FROM Relais r
WHERE r.id=1
EXERCICE 2 : MediaTek
Soit le diagramme de classe UML suivant :
CREATE TABLE Client OF TClient( PRIMARY KEY (num), CHECK (genre IN ('m', 'f')) );
CREATE TYPE TFacture AS OBJECT ( num NUMBER(10), client REF TClient, produit REF TProduit,
qte NUMBER(4) 6 );
CREATE TABLE Facture OF TFacture ( SCOPE FOR (client) IS Client, SCOPE FOR (produit) IS
Produit );
Une fois la base crée, insérer des données pour l'alimenter. On négligera la table Adresse pour la
suite de l'exercice (aucun de nos clients n'aura d'adresse).
2. Initialiser les tables client et produit avec les données de votre choix (au moins deux clients et
deux produits).
3. Initialiser les factures avec les données de votre choix (deux factures de deux lignes chacune au
moins).
DECLARE
oidclient1 REF TClient;
oidproduit1 REF TProduit;
oidclient2 REF TClient;
oidproduit2 REF TProduit;
BEGIN
SELECT REF(c) INTO oidclient1
FROM Client c
WHERE c.num=1;
4. Écrivez une requête permettant d'afficher la liste des factures existantes, avec le nom et le
prénom du client.
COLUMN num FORMAT A3
SELECT f.num, f.client.nom, f.client.prenom
FROM Facture f
GROUP BY f.num, f.client.nom, f.client.prenom;
5. Écrivez une requête permettant d'afficher le montant total de chaque facture, en rappelant le
numéro du client pour chaque facture.
COLUMN CLI FORMAT A3
SELECT f.num, f.client.num AS cli, SUM(f.qte * f.produit.prix) AS total
FROM Facture f
GROUP BY f.num, f.client.num
ORDER BY f.num, f.client.num
6. Écrivez une requête permettant d'afficher pour chaque client (num et nom) les produits (num et
désignation) qu'il a déjà achetés, avec la quantité correspondante.
SELECT f.client.num, f.client.nom, f.produit.num, f.produit.designation, SUM(f.qte) AS qte
FROM Facture f
GROUP BY f.client.num, f.client.nom, f.produit.num, f.produit.designation
ORDER BY f.client.num, f.client.nom, f.produit.num, f.produit.designation