M1 Informatique – Bases de données avancées – TD 1 2/3
Exercice 1 : Requêtes simples et exception
Soit la table EMP qui stocke des informations sur les employés d’une entreprise. On souhaite déterminer la
proportion de managers parmi eux.
1. Recopier la table DARMONT.EMP sur votre compte, sous le nom EMP à l’aide de la requête SQL
CREATE TABLE emp AS SELECT * FROM darmont.emp.
2. Écrire un bloc PL/SQL anonyme permettant de :
• compter le nombre total de n-uplets dans la table EMP et stocker le résultat dans une variable ;
• compter le nombre d’employés dont la fonction (JOB) est MANAGER dans la table EMP et stocker
le résultat dans une deuxième variable ;
• calculer la proportion (en pourcentage), stocker le résultat dans une troisième variable et afficher le
résultat à l’écran.
3. Tester !
4. Inclure dans le programme précédent un traitement d’exception permettant de détecter si la table EMP est
vide, c’est-à-dire, que le nombre total de n-uplets dans EMP est égal à zéro. Dans ce cas, déclencher une
erreur fatale (on ne peut pas permettre une division par zéro). Tester le bon fonctionnement de l’exception
en suivant la procédure suivante :
1. valider les mises à jour précédentes à l’aide de la commande SQL COMMIT (ou touche F11) ;
2. effacer le contenu de la table EMP (DELETE FROM emp) ;
3. exécuter le bloc PL/SQL ;
4. annuler l’effacement de la table EMP à l’aide de la commande SQL ROLLBACK (ou touche F12).
Exercice 2 : Curseur implicite
1. Créer une vue quelconque (ex. CREATE VIEW nom_emp AS SELECT ename FROM emp).
2. Écrire un bloc PL/SQL anonyme permettant d’afficher votre catalogue système (liste des tables et des
vues de votre compte disponible grâce à la vue système TAB) sous la forme :
L’objet UNE_TABLE est de type TABLE.
L’objet UNE_AUTRE_TABLE est de type TABLE.
L’objet UNE_VUE est de type VIEW.
…
Indication : Tester au préalable sous SQL l’exécution de la requête SELECT * FROM TAB pour avoir une
idée du contenu de la vue système TAB.
Exercice 3 : Curseur explicite
1. Recopier la table DARMONT.DEMO_PRODUCT_INFO sur votre compte (cf. Exercice 1).
2. Écrire un bloc PL/SQL anonyme permettant d’afficher le nom (PRODUCT_NAME) et le prix (LIST_PRICE)
des 5 produits les plus chers de la table DEMO_PRODUCT_INFO.
Indications :
• Définir un curseur qui liste les produits par ordre de prix décroissant.
• Effectuer un parcours explicite du curseur qui s’arrête tant que 5 n-uplets n’ont pas été lus.