Вы находитесь на странице: 1из 5

TP N° 1: Les Vues & Langage PL/SQL

Cette base de données conçue pour la gestion (très simplifiée) du transport aérien, sert de
support aux exercices du TP1, TP2 et TP3

Dictionnaire des données

Nom attribut Signification


Relation vol
Nopilot numéro de matricule du pilote
Tableau A.1 – Structure relation VOL
Nom nom du pilote
Nom attribut Signification Adresse adresse du pilote, limitée à la ville

novol numéro identification d’un vol Sal Qte du salaire mensuel

vildep ville de départ Comm qte commission mensuel qui peut


ne pas exister
vilar ville d’arrivée
Embauche date d'embauche
dep_h heure de départ (heure)

dep_mn heure de départ (minute) Relation avion

ar_h heure d'arrivée (heure) Tableau A.4 – Structure relation AVION

ar_mn heure d'arrivée (minute)


Nom attribut signification
ch_jour jour d'arrivée (0: même jour, :
lendemain) Nuavion numéro d’immatriculation d’un avion

Relation appareil Type code normalisé désignant une famille


d’avions
Tableau A.3 – Structure relation APPAREIL
Annserv année de mise en service

Nom nom donné à un avion qui peut ne pas


Nom attribut signification être connu

codetype code normalisé désignant une Nbhvol nombre heures de vol depuis la mise
famille d’avions en service

nbplace nombre de places


Relation affectation
désign nom de la famille d’avions Tableau A.5 – Structure relation AFFECTATION

Nom attribut signification

vol numéro identification d’un vol


Relation pilote
date_vol date du vol sous la forme :
Tableau A.2 – Structure relation PILOTE jj.mm.aa

pilote numéro du pilote conduisant

1
l’avion pour le vol
Nom colonne Type - contrainte
avion numéro d’immatriculation de
l’avion affecté au vol codetype CHAR(3) clé primaire

nbpass nombre effectif de passagers nbplace NUMBER(3)

design VARCHAR2(50)
LES TABLES
Table vol
Table avion
Tableau A.6 – Structure table VOL
Tableau A.9 – Structure table AVION

Nom colonne Type – contrainte


Nom colonne Type - contrainte
novol CHAR(6) clé primaire
nuavion CHAR(4) clé primaire
vildep VARCHAR2(30)
type CHAR(3) clé étrangère référence
vilar VARCHAR2(30) appareil.codetype

dep_h NUMBER(2) annserv NUMBER(4)

dep_mn NUMBER(2) nom VARCHAR2(50)

ar_h NUMBER(2) nbhvol NUMBER(8)

ar_mn NUMBER(2) Table affectation


ch_jour NUMBER(1) Tableau A.10 – Structure table AFFECTATION

Table pilote Nom colonne Type - contrainte


Tableau A.7 – Structure table PILOTE
vol CHAR(6) clé primaire, clé étrangère
référence vol.novol
Nom colonne Type – contrainte
date_vol DATE clé primaire
nopilot CHAR(4) clé primaire
pilote CHAR(4) clé étrangère référence
nom VARCHAR2(35) pilote.nopilot

adresse VARCHAR2(30) nbpass NUMBER(3)

sal NUMBER(8,2) avion CHAR(4) clé étrangère référence


avion.nuavion
comm NUMBER(8,2)

embauche DATE

Table appareil
Tableau A.8 – Structure table APPAREIL

Liaisons entre les tables

Figure A.1 – Liaisons entre tables

2
A. Création des tables
A1) Créer, sous l’éditeur WORKSHEET, les tables correspondant au modèle relationnel de
la figure A.1.
A2) Créer, toujours sous l’éditeur WORKSHEET, des données (des tuples) pour ces tables.

B. Quelques requêtes de prises en main de la base


B1) Lister les vols ayant un pilote qui habite la vile de départ du vol. Editer le numéro le
numéro de vol, la ville de départ, la ville d’arrivée et le nom du pilote.
B2) Lister les moyennes des heures de vol par type d’avion pour les avions qui ont un
nombre d’heures moyen supérieur à la moyenne du nombre d’heures tout type
confondu.
B3) Donner la liste des pilotes qui n’ont jamais été affectés à un vol. Afficher le numéro de
pilote.
B4) Donner la liste des vols qui correspondent à des aller-retours entre deux villes.
Afficher le numéro de vol, la ville de départ et la ville d’arrivée.
B5) Lister les vols ayant un pilote qui habite la ville de départ du vol. Editer le numéro de
vol, la ville de départ, la ville d’arrivée et le nom du pilote.
B6) Créer la table (totavion) qui comptabilise par avion le nombre de personnes
transportées et le nombre de vols effectués. Les colonnes sont : numéro d’avion,
nombre de passagers et le nombre de vols.

C. Compréhension des blocs PL/SQL


C1) Écrire un bloc PL/SQL permettant d’afficher les informations concernant les avions
dont le nombre des heures de vol dépassent de plus que 25 la moyenne des nbhvol de
toutes les avions de la base. Utiliser la notion ‘%ROWTYPE’.
C2) Écrire un bloc PL/SQL permettant d’afficher les noms et les adresses des pilotes dont
le salaire dépasse 25000 (Variable de substitution).

3
C3) Écrire un bloc PL/SQL permettant d’afficher toutes les informations concernant les
avions dont le nombre des heures de vol dépassent de plus que 25 la moyenne des
nbhvol de toutes les avions de la base.
C4) Écrire un bloc PL/SQL permettant d’afficher les noms des pilotes dont les salaires
dépassent 25000 et que la commission est inférieure à 20% du salaire. Afficher les
noms des pilotes et leurs dates d’embauche.
On désire afficher les mêmes informations en considérant le salaire et la commission
comme des paramètres (Curseur paramétré).
C5) Écrire un block PL/SQL permettant :
1. De récupérer la liste des pilotes qui ont été affectés un seul vol.
2. D’Insérer cette liste dans une table T1 dont le contenu est de type scalaire faisant
référence à la table pilote.nopilot.
3. D’insérer la commission de chaque pilote de la liste dans une deuxième table T2 dont
le contenu est de type scalaire faisant référence à la table pilote.comm.
4. De réduire la commission de chaque pilote de la liste de 5% et insérer le résultat de
chaque réduction dans une troisième table T3.
5. D’afficher le contenu des 3 tables T1, T2 et T3.
C6) Compléter le script suivant de façon à ajouter à chaque pilote sélectionné dans le
curseur C1 une commission de 500DH
DECLARE
CURSOR C1 IS SELECT nom, sal FROM pilote;
V_nom pilote.nom%type ;
V_sal pilote.sa%type;
BEGIN
. . .
END;
C7) PL/SQL offre la possibilité d’utiliser l’option CURRENT OF nom_curseur dans la
clause WHERE des instructions UPDATE et DELETE. Cette option permet de
modifier ou de supprimer la ligne distribuée par la commande FETCH. Pour utiliser
cette option il faut ajouter la clause FOR UPDATE à la fin de la définition du curseur.
Compléter le script suivant qui permet de modifiant le salaire d’un pilote avec les
contraintes suivantes :
- Si la commission est supérieure au salaire alors on rajoute au salaire la valeur de la
commission et la commission sera mise à la valeur nulle.
- Si la valeur de la commission est nulle alors supprimer le pilote du curseur.
DECLARE
CURSOR C_pilote IS
SELECT nom, sal, comm
FROM pilote
WHERE nopilot BETWEEN 1280 AND 1999 FOR UPDATE;
v_nom pilote.nom%type;
v_sal pilote.sal%type;
v_comm pilote.comm%type;
BEGIN
. . .
END;
C8) Écrire une procédure PL/SQL qui réalise l’accès à la table PILOTE par l’attribut
nopilote.Si le numéro de pilote existe, elle envoie dans la table ERREUR, le message
« NOM PILOTE-OK » sinon le message « PILOTE INCONNU ». De plus si
sal<comm, elle envoie dans la table ERREUR le message « « NOM PILOTE, COMM
>SAL ».

4
Indication : une erreur utilisateur doit être explicitement déclenchée dans la procédure
PL/SQL par l’ordre RAISE. La commande RAISE arrête l’exécution normale du bloc
et transfert le contrôle au traitement de l’exception.

D. Création des vues


D1) Créer une vue (v-pilote) constituant une restriction de la table pilote, aux pilote qui
habitent Paris.
D2) Vérifier est ce qu’il est possible de modifier les salaires des pilotes habitant Paris à
travers la vue v-pilote.
D3) Créer une vue (dervol) qui donne la date du dernier vol réalisé par chaque avion.
D4) Une vue peut être utilisée pour contrôler l’intégrité des données grâce à la clause
‘CHECK OPTION’.
Créer une vue (cr_pilote) qui permette de vérifier lors de la modification ou de
l’insertion d’un pilote dans la table PILOTE les critères suivants :
- Un pilote habitant Paris a toujours une commission
- Un pilote qui n’habite pas Paris n’a jamais de valeur de commission.
D5) Créer une vue (nomcomm) qui permette de valider, en saisie et mise à jour, le montant
commission d’un pilote selon les critères suivant :
- Un pilote qui n’est affecté à au moins un vol, ne peut pas avoir de commission
- Un pilote qui est affecté à au moins un vol peut recevoir une commission.
Vérifier les résultats par des mises à jour sur la vue nomcomm.

Вам также может понравиться