Vous êtes sur la page 1sur 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

Relation vol

Tableau A.1 – Structure relation VOL

Nom attribut

Signification

novol

numéro identification d’un vol

vildep

ville de départ

vilar

ville d’arrivée

dep_h

heure de départ (heure)

dep_mn

heure de départ (minute)

ar_h

heure d'arrivée (heure)

ar_mn

heure d'arrivée (minute)

ch_jour

jour d'arrivée (0: même jour, :

lendemain)

Relation appareil

Tableau A.3 – Structure relation APPAREIL

Nom attribut

signification

codetype

code normalisé désignant une famille d’avions

nbplace

nombre de places

désign

nom de la famille d’avions

Relation pilote

Tableau A.2 – Structure relation PILOTE

Nom attribut

Signification

Nopilot

numéro de matricule du pilote

Nom

nom du pilote

Adresse

adresse du pilote, limitée à la ville

Sal

Qte du salaire mensuel

Comm

qte commission mensuel qui peut ne pas exister

Embauche

date d'embauche

Relation avion

Tableau A.4 – Structure relation AVION

Nom attribut

signification

Nuavion

numéro d’immatriculation d’un avion

Type

code normalisé désignant une famille d’avions

Annserv

année de mise en service

Nom

nom donné à un avion qui peut ne pas être connu

Nbhvol

nombre heures de vol depuis la mise en service

Relation affectation

Tableau A.5 – Structure relation AFFECTATION

Nom attribut

signification

vol

numéro identification d’un vol

date_vol

date du vol sous la forme :

jj.mm.aa

pilote

numéro du pilote conduisant

1

l’avion pour le vol

avion

numéro d’immatriculation de l’avion affecté au vol

nbpass

nombre effectif de passagers

LES TABLES

Table vol

Tableau A.6 – Structure table VOL

Nom colonne

Type – contrainte

novol

CHAR(6) clé primaire

vildep

VARCHAR2(30)

vilar

VARCHAR2(30)

dep_h

NUMBER(2)

dep_mn

NUMBER(2)

ar_h

NUMBER(2)

ar_mn

NUMBER(2)

ch_jour

NUMBER(1)

Table pilote

Tableau A.7 – Structure table PILOTE

Nom colonne

Type – contrainte

nopilot

CHAR(4) clé primaire

nom

VARCHAR2(35)

adresse

VARCHAR2(30)

sal

NUMBER(8,2)

comm

NUMBER(8,2)

embauche

DATE

Table appareil

Tableau A.8 – Structure table APPAREIL

Nom colonne

Type - contrainte

codetype

CHAR(3) clé primaire

nbplace

NUMBER(3)

design

VARCHAR2(50)

Table avion

Tableau A.9 – Structure table AVION

Nom colonne

Type - contrainte

nuavion

CHAR(4) clé primaire

type

CHAR(3) clé étrangère référence appareil.codetype

annserv

NUMBER(4)

nom

VARCHAR2(50)

nbhvol

NUMBER(8)

Table affectation

Tableau A.10 – Structure table AFFECTATION

Nom colonne

Type - contrainte

vol

CHAR(6) clé primaire, clé étrangère référence vol.novol

date_vol

DATE clé primaire

pilote

CHAR(4) clé étrangère référence pilote.nopilot

nbpass

NUMBER(3)

avion

CHAR(4) clé étrangère référence avion.nuavion

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

A. Création des tables

A1)

Créer, sous l’éditeur WORKSHEET, les tables correspondant au modèle relationnel de

A2)

la figure A.1. 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. Donner la liste des pilotes qui n’ont jamais été affectés à un vol. Afficher le numéro de pilote.

B3)

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. 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.

B5)

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’. Écrire un bloc PL/SQL permettant d’afficher les noms et les adresses des pilotes dont le salaire dépasse 25000 (Variable de substitution).

C2)

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

C5)

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é). É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

v_comm pilote.comm%type;

pilote.sal%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)

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 :

Créer une vue (dervol) qui donne la date du dernier vol réalisé par chaque avion.

D5)

- Un pilote habitant Paris a toujours une commission

- Un pilote qui n’habite pas Paris n’a jamais de valeur de commission.

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.

5