63 1 145KB
NFA011 – Développement d’applications avec les bases de données
TP PL/SQL (Corrigé)
Exercices SQL (optionnel)
Donnez les commandes SQL suivantes : 1. Les pilotes qui gagnent plus de 20000 euros. Solution : select * from pilote where salaire >= 20000; 2. Le nombre de vols arrivant à Paris. Solution : select count(*) from vol where ville_arrivee = 'Paris'; 3. Les pilotes qui gagnent le plus (salaire le plus grand). Solution : select nom, salaire from pilote where salaire = (select max(salaire) from pilote); 4. Les villes classés en ordre décroissant du nombre de vols départ ? Solution : select ville_depart, count(*) as nb_vols from vol group by ville_depart order by nb_vols desc; 5. Noms de paires de pilotes qui ont le même age mais salaire différent. Solution : select p1.nom, p2.nom from pilote p1, pilote p2 where p1.age = p2.age and p1.salaire p2.salaire and p1.nom < p2.nom; 6. Combien de vols arrivent dans une ville d’où il n’y a pas de vol départ. Solution : select ville_arrivee, count(*) from vol where ville_arrivee in ((select ville_arrivee from vol) minus (select ville_depart from vol)) group by ville_arrivee;
NFA011
NFA011 – Développement d’applications avec les bases de données
7. Villes à partir desquelles il y au moins un vol de départ vers toutes les autres villes. On utilise seulement la table Vol, car la table Escales ne contient forcement toutes les villes. Cette requête donne la liste de toutes les villes dans la table Vol : create table ListeVilles as select * from ((select ville_depart as ville from vol) union (select ville_arrivee as ville from vol)); Une ville candidat (C) fait partie de la réponse s’il n’existe pas une autre ville (différente de C) vers laquelle il n’y a pas de vol a partir du C : c.t.d. la liste des villes vers lesquelles il n’y a pas de vols à partir de C est vide. Cette liste est égale a ListeVilles (toutes les villes) moins la liste des villes vers lesquelles il y a un vol à partir de C. select lv1.ville from ListeVilles lv1 -- lv1.ville est le candidat where not exists (select lv2.ville from ListeVilles lv2 where lv2.ville lv1.ville and lv2.ville not in (select ville_arrivee from vol where ville_depart = lv1.ville)); DROP TABLE ListeVilles purge;
Généralités SQL et PLSQL Exercice 1. Exécutez sous SQL*PLUS les solutions des exercices 1, 2, 3, 4, 5, 6 de la partie ED. Si des tables sont nécessaires il faut aussi les créer. Solution : Voir corrigé ED. Exercice 2. Écrire une fonction PL/SQL qui retourne le n-ème numéro de Fibonacci : x n= x n−1 + x n−2 où x 0=1 et x 1=1 Écrire une version récursive et une version itérative. Solution : CREATE OR REPLACE FUNCTION FIBOREC (N INTEGER) RETURN INTEGER IS BEGIN IF (N0)) OR ((quelVol.Ville_depart != villeDepart) AND (maxEscales nbMaxEscales) OR (nbMaxEscales < 1)) THEN DBMS_OUTPUT.PUT_LINE('Vérifier contraintes pour nombre d''escales'); ELSIF tourValideOE(villeBase, villeBase, nbMinEscales, nbMaxEscales) THEN DBMS_OUTPUT.PUT_LINE('Faites votre choix !'); NFA011
NFA011 – Développement d’applications avec les bases de données ELSE DBMS_OUTPUT.PUT_LINE('Aucun tour valide n''a pas été trouvé !'); END IF; END trouverEscalesOE; /
NFA011