connexion sur le serveur Oracle avec les identifiants personnels SELECT * FROM TAB; -> aucune ligne retournée => pas de table existante pour le moment SHOW USER; -> USER est "MAUDUIT" Pour le peuplement, on dumpe (SELECT * FROM TABLE) le contenu des tables sous l'autre compte, et on génère un script afin de peupler notre base. (cf peuplement.txt). Note : Y-a t'il un moyen intelligent d'enregistrer plusieurs valeurs en une requete ? (possible sous Mysql, mais apparemment pas trouvé sous Oracle). Apparemment en faisant des UNION ALL SELECT ... Evidemment, l'ordre d'éxecution des insert est important, étant donné la présence de clés étrangères. (Par exemple il parait impossible d'ajouter un coureur avant d'avoir définit son entraineur). 1. Déménagement du coureur à Bordeaux : UPDATE COUREUR SET VILLECOUREUR = 'BORDEAUX' WHERE NOMCOUREUR = 'MARTIN'; 2. INSERT INTO ENTRAINEUR (NUMENTR,NOMENTR, VILLEENTR, SALAIREENTR) VALUES (6,'PACHINKO', 'BELFORT', 6500); INSERT INTO ENTRAINEUR (NUMENTR,NOMENTR, VILLEENTR, SALAIREENTR) VALUES (7,'BOURGEAULT', 'BESANCON', 4500); INSERT INTO ENTRAINEUR (NUMENTR,NOMENTR, VILLEENTR, SALAIREENTR) VALUES (8,'CORBET', 'PARIS', 8500); Note : ici, on a mis 'en dur' les identifiants d'entraineurs, il aurait été intéressant de faire appel à un trigger et une sequence, comme expliqué ici : http://webxadmin.free.fr/article/oracle-autoincrement-columns-134.php 3- Supprimer de la table entraîneur tous les entraîneurs qui habitent Sochaux. Quelle est la condition pour que cette suppression soit possible. DELETE FROM Entraineur WHERE VIlleEntr = 'SOCHAUX'; La condition pour que cela fonctionne est qu'aucun coureur ne soit suivi par les entraineurs concernés par la suppression. Il faut soit supprimer les courreurs concernés par le suivi de l'entraineur, soit leur affecter un nouvel entraineur, le systeme obligeant les coureurs à être suivi par un entraineur. (UPDATE COUREUR SET NumEntr = 6 WHERE NUMCOUREUR IN (4,6); par exemple) 4- Donner à tous les entraîneurs de Belfort et de Montbéliard une augmentation de 5%. UPDATE Entraineur SET SalaireEntr = SalaireEntr + SalaireEntr * 5 / 100; 5- Donner à l’entraîneur du vainqueur de la course « le lion 2005 » une augmentation de 20%. UPDATE Entraineur SET SalaireEntr = SalaireEntr + SalaireEntr * 20 / 100 WHERE NumEntr = ( SELECT Coureur.NumEntr FROM Coureur JOIN Participe ON Participe.NumCoureur = Coureur.NumCoureur INNER JOIN Course ON Course.NumCourse = Participe.NumCourse WHERE PArticipe.Ordre = 1 AND Course.dateCourse LIKE '%/05' AND Course.LibCourse = 'Course du Lion'); 6- Ajouter une prime de 200 F à l’entraîneur qui gagne le moins. UPDATE Entraineur SET SalaireEntr = SalaireEntr + 200 WHERE NumEntr = ( SELECT NumEntr FROM Entraineur WHERE SalaireEntr = (SELECT MIN(SalaireEntr) FROM Entraineur)); 7- Donner une valeur « null » à tous les salaires des entraîneurs de Paris. UPDATE Entraineur SET SalaireEntr = NULL WHERE VilleEntr = 'PARIS' 8- Supprimer de la table courses toutes les courses qui se sont déroulées en 2004. Note : Il est nécessaire de vider avant la table participe de toutes les courses concernées DELETE FROM Participe WHERE Participe.NumCourse IN (SELECT NumCourse FROM Course WHERE DateCourse LIKE '%/04'); DELETE FROM Course WHERE DateCourse LIKE '%/04'; 9- Supprimer le coureur ALBERT. A quelle condition cela est-il possible ? DELETE FROM Coureur WHERE NomCoureur = 'ALBERT'; A condition qu'il n'ait pas participé à des courses : DELETE FROM Participe WHERE NumCoureur = (SELECT NumCoureur FROM Coureur WHERE NomCoureur = 'ALBERT'); 10- Ajouter une colonne code postal (numérique, 5 positions) à la table entraîneur. ALTER TABLE Entraineur ADD (CodePostal NUMBER(5)); 11- Ajoutez une contrainte d’intégrité de domaine sur le salaire de l’entraîneur. (salaire positif et < 10000F) ALTER TABLE Entraineur ADD Constraint salary Check (SalaireEntr between 0 and 10000); 12- Supprimer de la table entraîneur la colonne salaire. Est-ce possible ? ALTER TABLE Entraineur DROP COLUMN SalaireEntr