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