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

TME PL/SQL

Exercice 1

  • Exercice TME Poly (utiliser copier-coller à partir du pdf pour tester les procédures et les fonctions données) tme10-plsql-etudiants.pdf

Exercice 2

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)
  • PROJET ( NumProj, NomProj, RespProj, VilleP, Budget)
  • EMBAUCHE (NumSS, NumProj, DateEmb, Profil)
  • GRILLE_SAL (Profil, Salaire)

La clé primaire de chaque table est soulignée.

Rappels

Pour exécuter une procédure dans SQL*PLUS utilisez la commande:

               EXEC   nom_procedure(liste_paramètres) 

Pour afficher les éventuelles erreurs lors de la création d'une procédure ou d'une fonction, dans SQL*PLUS utilisez la commande:

 SHOW err 

CONSTITUTION DE LA BASE DE DONNÉES

commandedescription
cd mon_répertoire aller dans votre répertoire de travail
téléchargez le fichier tme10.tar
tar xvf tme10.tar désarchiver le fichier
cd TME10 aller dans le répertoire du tme
@vider Vider votre compte
@TME10-creations créer le schéma Entreprise
@TME10-insertions peupler la base Entreprise

Pour vérifier que votre base a été peuplée, exécuter les requêtes suivantes :

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

Exercices

  • 1. Copier-coller le bloc anonyme ci-dessous (jusqu'au caractère /). Exécutez ce programme puis commentez le résultat.
  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;
   /
 
  • 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.txt · Dernière modification: 10/02/2021 16:13 par camelia