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

Ceci est une ancienne révision du document !


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 :

  • 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;
   /
 
  • 1.(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.
  • 2.(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.
  • 3.(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.
  • 4.(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.
site/enseignement/licence/2i009/documents-tme/tme-plsql.1483724242.txt.gz · Dernière modification: 06/01/2017 18:37 par camelia