Bases de données avancées

Transcription

Bases de données avancées
Université Libanaise
Faculté des Sciences
2013-2014
Master Pro : STRI
STRI 404
Bases de données avancées
TP n˚ 1 : Principes PL/SQL, curseurs et procédures
Utilisation de SQL Plus
1. Lancer SQL PLus
2. Connectez vous en utlisant votre identifiant et mot de passe
3. Mettre les commandes SQL et PL/SQL dans un fichier .sql (par exemple commandes.sql
sous le répertoire C:)
4. Exécuter le script en tapant @c:\commandes.sql
On considère une base de données géographique destinée à la gestion des pays et des espaces maritimes
(rivières, fleuves, mers et océans) méditerranéens.
Chaque pays est connu par un nom, une superficie, un nombre d’habitants, la liste des pays qui ont
une frontière commune avec lui et la liste des espaces maritimes qui le traversent.
Un espace maritime est connu par :
1. son nom,
2. son type (rivière, fleuve, mer ou océan),
3. sa longueur (pour les rivières et les fleuves),
4. l’espace maritime dans lequel il se jette (pour les rivières et les fleuves),
5. le nom du pays dans lequel il prend sa source (pour les rivières et les fleuves),
6. la liste des pays qu’il traverse (pour les rivières et les fleuves),
7. la distance parcourue dans chacun de ces pays (pour les rivières et les fleuves),
8. la liste des pays qu’il côtoie (pour les mers et les océans).
On aboutit au schéma relationnel suivant :
PAYS(NomPays, Superficie, NbHabitant)
FRONTIERE(NomPays1#, NomPays2#)
ESPACE_MARITIME(NomMaritime, Type, Longueur, NomMaritimeJ#, PaysSource#)
TRAVERSER(NomPays#, NomMaritime#, Distance)
COTOYER(NomMaritime#, NomPays#)
Remarque : on prendra garde à bien différencier :
– la clé étrangère PaysSource dans la table ESPACE_MARITIME qui indique le pays dans lequel l’espace
maritime (pour les rivières et fleuves) prend sa source,
– et la clé étrangère NomPays dans la table TRAVERSER qui permet de savoir quels pays traversent les
rivières et les fleuves et la distance qu’ils parcourent dans chaque pays.
Même remarque pour la clé étrangère NomMaritime de la table COTOYER.
1. Compléter et exécuter le fichier CreationBaseTP1.sql qui contient les ordres de création des tables
et leur remplissage.
Pour plus de commodité, retrouver le contenu des différentes tables de la base de données en annexe
1.
2. En utilisant le Dictionnaire des Données (annexe 2) :
– Donner la requête permettant d’obtenir la liste des tables créées ;
1
– Donner la requête permettant d’obtenir une description des colonnes (nom et type) de la table
PAYS ;
– Donner la requête permettant d’obtenir le nom et le type des contraintes de la table ESPACE_MARITIME ;
– Donner la requête permettant d’obtenir le commentaire de la table COTOYER ;
3. Pour les besoins d’une application, on souhaite connaître les fleuves et les rivières coulant au Liban
par ordre décroissant de longueur, ainsi que le nombre total de fleuves et de rivières coulant dans
le pays. Écrire les deux requêtes SQL permettant d’afficher ces caractéristiques.
4. Encapsulez ces deux requêtes dans une procédure stockée PL/SQL effectuant la même chose. Vous
coderez trois versions différentes de la procédure :
– en utilisant un curseur manuel (DECLARE, OPEN, FETCH et CLOSE)
– en utilisant un curseur semi-automatique (DECALRE et FOR LOOP)
– en utilisant un curseur automatique (FOR LOOP uniquement)
Tester l’appel de cette procédure.
5. Créer une nouvelle procédure stockée reprenant la précédente mais permettant de lire le pays dans
lequel coule les fleuves en utilisant une variable de substitution. Tester l’appel de cette procédure.
Que remarquez-vous ?
6. Créer une nouvelle procédure stockée reprenant la précédente mais permettant de paramétrer le
pays dans lequel coule les fleuves. Tester l’appel de cette procédure :
– en passant directement le paramètre
– en les récupérant via un ACCEPT ... PROMPT
7. Écrire une procédure stockée qui pour un espace maritime entré en paramètre affiche :
– son type, sa longueur, l’espace maritime dans lequel il se jette, le pays dans lequel il prend sa
source
– la liste de tous les pays qu’il traverse, avec la distance parcourue dans le pays
8. Écrire une procédure stockée qui affiche pour chaque espace maritime contenu dans la base, le type,
la longueur, l’espace maritime dans lequel il se jette, et le pays dans lequel il prend sa source.
Pour chaque espace maritime, vous afficherez la liste de tous les pays qu’il traverse avec la distance
parcourue dans le pays.
9. Écrire une procédure stockée permettant d’afficher tous les fleuves qui coulent dans le même nombre
de pays qu’un fleuve rentré en paramètre. Avant d’afficher la liste de tous ces fleuves, vous indiquerez
à l’utilisateur le nombre de pays traversés par le fleuve entré en paramètre.
S’il vous reste du temps... : révisions SQL !
1. Écrire une requête permettant d’afficher les fleuves qui ne coulent que dans 1 seul pays (au moins
de 2 façons différentes)
2. Écrire une requête renvoyant les 4 fleuves les plus longs.
Aide : - il est possible de récupérer un numéro de ligne avec le champ rownum. - la requête triant les
fleuves selon leur longueur peut être utilisée comme table, avec la syntaxe suivante : select ...
from (select ... ) ... ;
2
Annexe 1
Table : PAYS
NomPays
VARCHAR2(25)
Liban
Syrie
Turquie
Irak
Superficie
NUMBER(12)
10452
185180
783562
437072
NbHabitant
NUMBER(12)
4140000
20820300
75627384
31234000
Table : FRONTIERE
NomPays1
NomPays2
VARCHAR2(25) VARCHAR2(25)
Liban
Syrie
Syrie
Liban
Syrie
Turquie
Syrie
Irak
Turquie
Irak
Turquie
Syrie
Irak
Turquie
Irak
Syrie
Table : ESPACE_MARITIME
NomMaritime
Type
VARCHAR2(25)
VARCHAR2(25)
Mer Méditerranée
Mer
Fleuve d’Abraham
Fleuve
Fleuve de Damour
Fleuve
Fleuve de Aarqa
Fleuve
Fleuve d’Abou Ali
Fleuve
Fleuve de Beyrouth
Fleuve
Fleuve du Jaamani
Fleuve
Grand fleuve
Fleuve
Fleuve d’Antélias
Fleuve
Fleuve Awali
Fleuve
Fleuve Froid
Fleuve
Fleuve Jaouz
Fleuve
Fleuve Lycus
Fleuve
Fleuve Oustwan
Fleuve
Oronte
Fleuve
Euphrate
Fleuve
Balikh
Riviere
Khabur
Riviere
Sajour
Riviere
Tigre
Fleuve
Longueur
NUMBER(12)
0
30000
30000
25000
44500
29000
10000
60000
2000
48000
24000
25000
31000
20000
571000
2780000
500000
320000
90000
1900000
3
NomMaritimeJ
VARCHAR2(25)
PaysSource
VARCHAR2(25)
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Fleuve de Beyrouth
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Tigre
Euphrate
Euphrate
Euphrate
Euphrate
Liban
Liban
Liban
Liban
Liban
Liban
Syrie
Liban
Liban
Liban
Liban
Liban
Liban
Liban
Turquie
Syrie
Turquie
Syrie
Turquie
Table : TRAVERSER
NomPays
NomMaritime
VARCHAR2(25)
VARCHAR2(25)
Liban
Fleuve d’Abraham
Liban
Fleuve de Damour
Liban
Fleuve de Aarqa
Liban
Fleuve d’Abou Ali
Liban
Fleuve de Beyrouth
Liban
Fleuve du Jaamani
Liban
Fleuve d’Antélias
Liban
Fleuve Awali
Liban
Fleuve Froid
Liban
Fleuve Jaouz
Liban
Fleuve Lycus
Liban
Fleuve Oustwan
Syrie
Balikh
Syrie
Grand fleuve
Liban
Grand fleuve
Liban
Oronte
Syrie
Oronte
Turquie
Euphrate
Syrie
Euphrate
Irak
Euphrate
Turquie
Khabur
Syrie
Khabur
Irak
Khabur
Syrie
Sajour
Turquie
Sajour
Irak
Sajour
Turquie
Tigre
Syrie
Tigre
Irak
Tigre
Table : COTOYER
NomMaritime
VARCHAR2(25)
Mer Méditerranée
Mer Méditerranée
Mer Méditerranée
Distance
NUMBER(12)
30000
30000
25000
44500
29000
10000
2000
48000
24000
25000
31000
20000
500000
40000
20000
46000
525000
1300000
80000
1400000
210000
40000
70000
30000
30000
30000
70000
60000
60000
NomPays
VARCHAR2(25)
Liban
Syrie
Turquie
4
Annexe 2 : Vues du dictionnaire des données
Le dictionnaire des données contient des informations sur les objets de la base, les utilisateurs et les
évènements. On peut accéder à ces informations à travers les vues suivantes du dictionnaire :
Vue
Description
TABS
Synonym for USER_TABLES.
USER_AUDIT_OBJECT
Audit trail records for statement concerning objects.
USER_AUDIT_SESSION
All audit trail records concerning connections and disconnections
for the user.
USER_AUDIT_STATEMENT Audit trail entries for the following statements : grant, revoke,
audit, noaudit, and ALTER SYSTEM
USER_AUDIT_TRAIL
Audit trail entries relevant to the user.
USER_CATALOG
Tables, views, synonyms, and sequences owned by the user.
USER_CLUSTERS
Description of user’s own clusters.
USER_CLU_COLUMNS
Mapping of table columns to cluster columns.
USER_COL_COMMENTS
Comments on columns of user’s tables or views.
USER_COL_PRIVS
Grants on columns for which the user is the owner, grantor, or
grantee.
USER_COL_PRIVS_MADE
All grants on columns of objects owned by the user.
USER_COL_PRIVS_RECD
Grants on columns for which the user is the grantee.
USER_CONSTRAINTS
Constraint definitions on user’s tables.
USER_CONS_COLUMNS
Information about columns in constraint definitions owned by the
user.
USER_DB_LINKS
Database links owned by the user.
USER_DEPENDENCIES
Dependencies to and from a user’s objects.
USER_ERRORS
Current errors on all stored objects in the database.
USER_EXTENTS
Extents of the segments owned by the user.
USER_FREE_SPACE
Free extents in tablespace accessible to the user.
USER_INDEXES
Description of the user’s own indexes.
USER_IND_COLUMNS
Columns of the user’s indexes or on user’s tables.
USER_OBJECTS
Objects owned by the user.
USER_OBJECT_SIZE
User’s PL/SQL objects.
USER_OBJ_AUDIT_OPTS
Auditing options for user’s own tables and views.
USER_RESOURCE_LIMITS Displays the resource limits for the current user.
USER_ROLE_PRIVS
Roles granted to the user.
USER_SEGMENTS
Storage allocation for all database segments.
USER_SEQUENCES
Description of the user’s own sequences.
USER_SNAPSHOTS
Snapshots the user can view.
USER_SNAPSHOT_LOGS
All snapshot logs owned by the user.
USER_SOURCE
Text source of all stored objects in the database.
USER_SYNONYMS
The user’s private synonyms.
USER_SYS_PRIVS
System privileges granted to the user.
USER_TABLES
Description of the user’s own tables.
USER_TABLESPACES
Description of accessible tablespaces.
USER_TAB_COLUMNS
Columns of user’s tables, views, and clusters.
USER_TAB_COMMENTS
Comments on the tables and views owned by the user.
USER_TAB_PRIVS
Grants on objects for which the user is the owner, grantor, or
grantee.
USER_TAB_PRIVS_MADE
All grants on objects owned by the user.
USER_TAB_PRIVS_RECD
Grants on objects for which the user is the grantee.
USER_TRIGGERS
Description of the user’s triggers.
USER_TS_QUOTAS
Tablespace quotas for the user.
USER_USERS
Information about the current user.
USER_VIEWS
Text of views owned by the user.
5