Vous êtes sur la page 1sur 3

ROYAUME DU MAROC

UNIVERSITE HASSAN Premier


FACULTE DES SCIENCES ET TECHNIQUES DE SETTAT

Date : 05/03/2021
Contrôle
Module : LST : Base De Données Avancée
Session de Automne
Durée : 1H45
Documents non autorisés

Soit la base de données relationnelle « Gestion_Ventes » stockée dans un serveur Oracle « Host : SiteC » et
composée des tables suivantes
- Clients(idclient, Societe, Contact, Ville, Pays)
- Produits(idProduit, Designation, PrixUnitaire, Stock, idfour)
- Commandes(idcommande, DateCommande, DateLivraison, idclient)
- LigneCommandes(idligne, idcommande, idproduit, Quantite, Remise%)
- Fournisseur(idFour, SocieteFour, AdresseFour, VilleFour, PaysFour)
Avec les contraintes d’intégrité suivantes :
Primary key : Foreign key
- clients(idclient) - commande(idclient) references clients(idclient) on delete cascade
- Produits(idprduit) - lignecommandes(idproduit) references produits(idprofuit)
- commandes(idcommande) - lignecommandes(idcommande) references commandes(idcommande)
- lignecommandes(idligne) on delete cascade
- fournisseurs(idfour) - produits(idfour) references fournisseurs(idfour)

Exercice-1:
Créer une requêtes SQL permettant d’afficher les clients avec pour chacun d’eux les produits qui n’a pas
encore commandé. La requête doit afficher les attributs (idclient, societe, idProduit).

Exercice-2:
Créer un trigger « verifierStock » qui permet de vérifier la disponibilité d’un produit avant chaque insertion
d’une nouvelle ligne de commande (ligneCommande) dans une commande déjà crée. Une exception doit
annuler l’insertion et affiche un message d’erreur « Quantité insuffisante » si la quantité demandée (Quantite)
est supérieure à la quantité en stock (Stock). Ce trigger doit aussi faire la mise à jour du stock si le produit est
disponible.

1
ROYAUME DU MAROC
UNIVERSITE HASSAN Premier
FACULTE DES SCIENCES ET TECHNIQUES DE SETTAT

Exercice-3 :
Soit le serveur oracle distant « Host : Site1 » où on a stocké les tables fragmentées « clients », « Commandes »
et « lignecommandes » de la BDD « Gestion_Vente ». La fragmentation verticale est réalisée suivant la
requête de sélection ci-dessous :
Dans le Site1 : " " (avec les mêmes contraintes d’intégrités de la BDD globale)
Soient les liens public « lienSite1 » et « lienSiteC » créés respectivement dans les « SiteC » et « Site1 » :
⎯⎯⎯⎯⎯
1
!⎯⎯⎯⎯⎯"
Soient les synonymes suivants :
Create public Synonym Clients1 For Clients@lienSite1
Create public Synonym Commandes1 For Commandes@lienSite1
Create public Synonym lignecommandes1 For lignecommandes@lienSite1

1- Dans Le siteC, créer un trigger « synch_update_clients » permettant de synchroniser une mise à jour
d’un client dans le « siteC » avec le site distant Site1.

Exercice-4 :
Soit la fonction stockée dans Oracle Saison(D date) return varchar2 qui permet de renvoyer la saison de
l’année correspondant à une date transmise en paramètre.
Nous voulons créer une procédure stockée Oracle permettant de renvoyer les attributs « idproduit »,
« designation » et « CA » des n premiers produits qui ont réalisé le plus grand chiffre d’affaire pendant une
saison et une année données. La valeur de `n` sera transmise en paramètre d’entré et sorti de la procédure.
Cette dernière va charger en mémoire un nombre de produit qui est inférieur ou égale à la valeur initiale de n
(n est un entier). La saison, l’année, le tableau où on va charger les n produits ainsi que sa dimension n seront
des paramètres de la procédure. Le prototype de la procédure est le suivant :
Procedure ProdSaison(Sa Varchar2, An integer, V in out tab, n in out Integer)
a- Créer un package où vous allez :
i. Déclarer le type de données table « tab »
ii. Déclarer et définir La procédure ProdSaison(). Cette procédure doit afficher le massage « pas de
ventes pendant cette saison » s’il n’y a pas de ventes réalisées pendant la saison et l’année
transmises à la procédure.
b- Créer un programme qui appelle cette procédure et affiche les attributs «idproduit», « designation » et
« CA » des n produits.

2
ROYAUME DU MAROC
UNIVERSITE HASSAN Premier
FACULTE DES SCIENCES ET TECHNIQUES DE SETTAT

Exercice-5:

Nous voulons créer une fonction qui permet de renvoyer le nombre et la liste des clients (idclient, Societe,
Pays) qui n’ont pas réalisé de commande pendant une année donnée. Cette dernière sera transmise en
paramètre d’entré. Le tableau de chargement des clients dans la mémoire sera un deuxième paramètre d’entré
et de sorti de la fonction. La valeur renvoyée par cette fonction représente le nombre de client.
Function listeclient(T IN OUT tab, ANN integer) RETURN integer.
a- Créer un package où vous allez :
i. Déclarer le type de données « tab »
ii. Déclarer et définir La fonction listeclient().
b- Créer un programme qui appelle cette fonction et affiche le nombre de clients qui n’ont pas commandé
pendant l’année ANN ainsi que la liste de ces clients (idclient, Societe, Pays).

NB. Tout bloc PL/SQL qui génère des erreurs systèmes, comme «No_Data_Found », «Too_Many_Rows»,
« integrity constraint … violated - parent key not found » ou « unique constraint … violated », va être
considéré faux si l’erreur n’est pas gérée correctement.

Vous aimerez peut-être aussi