Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:licence:2i009:documents-tme:tme-plsql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
site:enseignement:licence:2i009:documents-tme:tme-plsql [06/01/2017 18:11]
camelia
site:enseignement:licence:2i009:documents-tme:tme-plsql [10/02/2021 16:13] (Version actuelle)
camelia ↷ Page déplacée de site:2i009:documents-tme:tme-plsql à site:enseignement:licence:2i009:documents-tme:tme-plsql
Ligne 1: Ligne 1:
 ====== TME PL/SQL ====== ====== TME PL/SQL ======
  
-Nous travaillerons ​dans ce TP sur les trois tables suivantes qui permettent de décrire des employés, des projets, l'​affectation des employés aux projets et les grilles de salaire pour différents profils de postes :+<fc #​6495ed>​Exercice 1</​fc>​  
 +   * Exercice TME Poly (utiliser copier-coller à partir du pdf pour tester les procédures et les fonctions données) {{:​site:​enseignement:​licence:​2i009:​documents-tme:​tme10-plsql-etudiants.pdf|}} 
 + 
 +<fc #​6495ed>​Exercice 2</​fc>​ 
 + 
 +Nous travaillerons ​par la suite sur les trois tables suivantes qui permettent de décrire des employés, des projets, l'​affectation des employés aux projets et les grilles de salaire pour différents profils de postes :
   * EMPLOYE (__NumSS__, NomE, PrenomE, VilleE, DateNaiss)   * EMPLOYE (__NumSS__, NomE, PrenomE, VilleE, DateNaiss)
   * PROJET ( __NumProj__,​ NomProj, RespProj, VilleP, Budget)   * PROJET ( __NumProj__,​ NomProj, RespProj, VilleP, Budget)
Ligne 10: Ligne 15:
  
  
-===Rappels===+<fc #6495ed>Rappels</​fc>​ 
 Pour exécuter une procédure dans SQL*PLUS utilisez la commande: ​ Pour exécuter une procédure dans SQL*PLUS utilisez la commande: ​
 +<code sql> ​             ​
                ​exec ​  ​nom_procedure(liste_paramètres) ​                ​exec ​  ​nom_procedure(liste_paramètres) ​
 +</​code> ​              
  
 Pour afficher les éventuelles erreurs lors de la création d'une procédure ou d'une fonction, dans SQL*PLUS utilisez la commande: ​ Pour afficher les éventuelles erreurs lors de la création d'une procédure ou d'une fonction, dans SQL*PLUS utilisez la commande: ​
  <​code sql> show err </​code> ​  <​code sql> show err </​code> ​
  
-===== CONSTITUTION DE LA BASE DE DONNÉES ​=====+<fc #008080>CONSTITUTION DE LA BASE DE DONNÉES</fc>
  
 ^commande^description^ ^commande^description^
Ligne 27: Ligne 35:
 | @TME10-creations | créer le schéma Entreprise | | @TME10-creations | créer le schéma Entreprise |
 | @TME10-insertions | peupler la base Entreprise | | @TME10-insertions | peupler la base Entreprise |
 +
 +Pour vérifier que votre base a été peuplée, exécuter les requêtes suivantes :
 +<code sql>
 +select count(*) as Num_employes from employe; // retourne 11
 +select count(*) as Num_projets from projet; // retourne 3
 +select count(*) as Num_embauche from embauche; // retourne 3
 +select count(*) as Num_sal from grille_sal; // retourne 3
 +</​code>​
 +
 +<fc #​6495ed>​Exercices</​fc> ​
 +  * **1.** Copier-coller le bloc anonyme ci-dessous (jusqu'​au caractère ​ /). Exécutez ce programme puis commentez le résultat.
 +  <code sql>
 +  DECLARE ​
 +trouve BOOLEAN;
 +BEGIN
 +   ​FOR ​ r  IN (Select numproj, nomproj, villep from Projet ORDER BY nomproj)
 + LOOP
 +             ​dbms_output.put_line('​-----------------------------------'​);​
 +             ​dbms_output.put_line('​Projet:​ '​||r.nomproj||'​ dans la ville  '​||r.villep);​
 +             ​dbms_output.put_line('​-----------------------------------'​);​
 +                       ​trouve := FALSE;
 +                       for r2 IN (Select nome, prenome from employe e, embauche b 
 +                                      Where e.numss=b.numss and b.numproj=r.numproj )
 +                       LOOP
 +                            dbms_output.put_line('​Employé:​ '|| r2.nome||',​ '|| r2.prenome);​
 +                            trouve := TRUE;
 +                      END LOOP;
 +                      IF(trouve = FALSE) THEN
 +                            dbms_output.put_line('​Pas d''​employé'​);​
 +                       END IF;
 +              END LOOP;
 +   END;
 +   /
 +  </​code> ​
 +  * **2.** (//Curseur Implicite//​). Écrivez un bloc PL/SQL anonyme qui supprime tous les employés de la table EMPLOYE qui ont  70 ans ou plus et qui affiche le nombre de lignes qui ont été supprimées ou le message 'Aucun employé supprimé'​ si aucun employé n'a plus de 70 ans. Utilisez les attributs d'un curseur implicite. ​
 +
 +   * **3.** (//​Curseur//​) Écrivez un bloc PL/SQL anonyme qui modifie tous les noms des profils dans la table grille_sal en ajoutant la lettre '​P'​ devant chaque nom de profil. Pour chaque profil modifié dans la table grille_sal les valeurs correspondantes dans la table embauche doivent également être modifiées. Utilisez un curseur.  ​
 +
 +   * **4.** (//Curseur avec des paramètres//​) Écrivez un bloc PL/SQL anonyme qui affiche tous les noms de projet, pour chaque nom de projet on affiche les noms des employés affectés à ce projet. Utiliser un curseur avec des paramètres.
 +
 +   * **5.** (//​Utilisation CASE et Curseur//​)Écrire un bloc anonyme qui augmente tous les salaires dans la table Grille_Sal. Les salaires inférieurs à 40000 sont augmentés de 30%, les salaires compris entre 40000 et 60000 de 20% et les salaires supérieurs à 60000 sont augmentés de 10%.  Utilisez un CASE pour tester les différentes valeurs possibles du salaire.
 +
 +   * **6.** (//​Exception prédéfinie//​) Écrire une procédure PL/SQL qui a 3 paramètres:​ le numSS, le nomE et prenomE d'​un ​ nouvel employé à insérer dans la table Employé. S'il existe déjà un autre employé avec le même numSS dans la table Employé elle doit afficher un message d'​erreur sans insérer l'​utilisateur. Dans le cas contraire la procédure doit insérer le nouvel employé et afficher un message de confirmation. Utilisez l'​exception prédéfinie **NO_DATA_FOUND**. ​
 +
 +   * **7.** (//​Exception utilisateur//​) Écrire une procédure qui prend comme paramètre le numéro et le budget d'​un ​ projet et qui l'​ajoute à la table projet seulement si la somme tous les budgets après l'​ajout ne dépasse pas 400000. Dans le cas contraire le projet n'est pas ajouté et un message d'​erreur est affiché à l'​utilisateur. Utilisez une exception utilisateur.  ​
  
site/enseignement/licence/2i009/documents-tme/tme-plsql.1483722693.txt.gz · Dernière modification: 06/01/2017 18:11 par camelia