Vous êtes sur la page 1sur 2

Série de TD PL/SQL

Exercice 1
2001, il est temps de passer à l’Euro pour l’entreprise de VPC dont la base de données CLIENT-COMMANDE-
PRODUIT-FOURNISSEUR. Écrire un programme PL/SQL permettant de construire, à partir de la table
PRODUIT, une table PRODUIT2000 telle que:
 la désignation des produits soit écrite en majuscules ;
 le prix unitaire en francs des produits soit converti en Euros. Le prix en Euros devra être entier (arrondir au
supérieur).
Cas particuliers à traiter :
 Si la table PRODUIT est vide, la table PRODUIT2000 devra contenir uniquement le tuple (0,’Pas de
produit’, NULL, NULL).
 Si un prix de la table produit est NULL, son prix en Euros doit être 0.
Indications :
 Considérer que la structure de la table PRODUIT2000 a déjà été créée.
 Tester si la table PRODUIT est vide. Si ce n’est pas le cas, y accéder séquentiellement à l’aide d’un curseur,
effectuer les transformations sur les champs et stocker le résultat dans la table PRODUIT2000.
 Utiliser les fonctions SQL*Plus UPPER, TRUNC et NVL.

Exercice 2
Pour tenter d’établir une corrélation, on souhaite connaître la différence de quantité moyenne entre les
commandes successivement enregistrées dans la table COMMANDE de la base de données CLIENT-
COMMANDE-PRODUIT-FOURNISSEUR. La table COMMANDE est remplie de commandes valuées (c’est-
à-dire, pour lesquelles l’attribut QUANTITE n’est pas NULL) ou non. Les commandes non valuées ne sont pas à
prendre en compte. Écrire un programme PL/SQL permettant de calculer la différence de quantité moyenne entre
les commandes.
Cas particuliers à traiter :
 La table COMMANDE contient moins de deux commandes valuées.
Indications :
 Créer un curseur contenant les quantités de commandes valuées.
 Lire la première quantité puis, pour toutes les quantités suivantes, cumuler la valeur absolue de quantité
courante – quantité précédente (fonction ABS).
 Afficher le résultat dans une exception à l’aide de la procédure RAISE_APPLICATION_ERROR. Utiliser
l’opérateur de concaténation || et la fonction TO_CHAR.

Exercice 3
1. Exécutez le script lab4_1.sql pour créer une table MESSAGES. Ecrivez un Bloc PL/SQL pour insérer
des nombres dans la table MESSAGES.
a. Insérez les nombres de 1 à 10, en excluant 6 et 8.
b. Programmer un commit avant la fin du bloc PL/SQL
c. Afficher le contenu de la table MESSAGES pour tester votre bloc PL/SQL
RESULTS
---------
1
2
3
4
5
7
9
10

2. Créez un bloc PL/SQL qui calcul le montant de la commission d’un employé donné, en fonction de son
salaire.
a. Exécutez le script lab4_2.sql qui crée un nouvel employé dans la table EMP.
Note : L’employé aura un salaire NULL.
b. Faites saisir le numéro d’employé à l’utilisateur, à l’aide d’une variable de substitution
SQL*Plus.
c. Si le salaire de l’employé est inférieur à $1000, la commission vaut 10% du salaire.

1
d. Si le salaire de l’employé est compris entre $1000 et $1500, la commission vaut 15% du
salaire.
e. Si le salaire de l’employé est supérieur à $1500, la commission vaut 20% du salaire.
f. Si le salaire de l’employé est NULL, la commission vaut 0.
g. Programmer un commit avant la fin du bloc PL/SQL
h. Exécuter votre programme PL/SQL, utiliser le tableau suivant pour tester chaque cas,
et vérifier la valeur de la commission.

EMPNO ENAME SAL COMM


----- ------ ----- ---------
8000 DOE 0
7499 ALLEN 1600 320
7934 MILLER 1300 195
7369 SMITH 800 80

S’il vous reste du temps, faites les exercices suivants :


3. Modifiez le fichier p1q4.sql pour insérez le texte « Nombre pair » ou « Nombre impair », selon que le
nombre correspondant dans la table MESSAGES est pair ou impair. Regardez votre table MESSAGES
pour vérifier que le programme PL/SQL a fonctionné.
RESULTS
---------------
Nombre pair

4. Ajoutez une nouvelle colonne STARS varchar2(100), dans la table EMP qui permettra de stocker des
étoiles (*).
5. Créez un programme PL/SQL qui récompense les employés en leur attribuant une étoile dans la colonne
STARS par tranche de salaire de $100.Sauvegardez votre programme PL/SQL sous le nom p4q5.sql.
a. Faites saisir le numéro d’employé à l’utilisateur, par une variable de substitution SQL*Plus.
b. Initialiser une variable qui contiendra un ensemble d’étoile (*).
c. Ajoutez une étoile à la chaîne par tranche de salaire de $100. Par exemple , si l’employé a
un salaire de $800, la chaîne comportera 8 étoiles. Si l’employé touche un salaire de 1250, la
chaîne comportera 13 étoiles.
d. Programmer un Update de la colonne STARS de tous les employés avec cette chaîne (*).
e. Programmer un commit avant la fin du bloc PL/SQL
f. Testez le programme pour les employés qui n’ont pas de salaires et pour ceux qui en ont
un.

Entrez le numéro d’employé : 7934


PL/SQL procedure successfully completed.
Entrez le numéro d’employé : 8000
PL/SQL procedure successfully completed.

EMPNO SAL STARS


----- ------ ----------------
8000
7934 1300 *************

Vous aimerez peut-être aussi