Vous êtes sur la page 1sur 6

Filière ILISI-2 Module PLSQL & Administration Oracle

TP Records & Curseurs

1. Créer les blocs PLSQL qui répondent aux questions suivantes : (un bloc par question)

a) Utiliser premièrement une variable de même type que les enregistrements de la table
« employees » pour afficher toutes les informations initiales de l’employé dont le matricule
est saisi par l’utilisateur.

b) Modifier ensuite le salaire et l’email de cet employé dont le matricule et les


nouvelles valeurs sont saisies par l’utilisateur. (Vérifier à ce que le nouveau salaire est
supérieur à 5000).

c) Enfin, utiliser une variable « RECORD » pour afficher et modifier les mêmes
informations de l’employé.

d) Utiliser une variable de session Oracle, pour stocker la date la plus ancienne de
recrutement des employés et l’afficher à la fin.

2. Créer un bloc PLSQL qui utilise un curseur explicite permettant d’afficher les informations
des départements qui comptabilisent le même nombre d’employés que le département numéro
30. Le curseur doit comprendre aussi la masse salariale par département.

Indication : Exécutez l'instruction FETCH dans une boucle simple.


Utilisez l'expression EXIT WHEN curseur%NOTFOUND pour sortir de la boucle.

3. Réécrire le bloc PLSQL précédent en intégrant le curseur dans une boucle FOR.

4. Modifier la boucle FOR en utilisant un curseur avec paramètre « numdep » dont sa valeur est
rentrée par l’utilisateur. Cette fois-ci, les départements affichés doivent comptabiliser le même
nombre d’employés que le numéro de département passé en paramètre.
TP EXCEPTIONS

1. Ecrivez un bloc PL/SQL pour :


a. Entrer un numéro d’employé;
b. Afficher son numéro, prénom, nom, salaire et nom du département
où il travaille. Si cet employé n’existe pas, afficher un message
d’erreur.
Conseil: Utiliser l’exception NO_DATA_FOUND.

2. Créez une exception personnalisée ID_empty pour le bloc plsql que


vous avez créée. Lever l'exception si le numéro d’employé saisi est
nul.
Conseil : à rappeler que les variables de substitution sont modifiées
avant l’exécution du bloc plsql. Ainsi, il faut récupérer la variable de
substitution dans une variable chaine de caractère « emp_num » à
tester après si elle est vide: (IF emp_num IS NULL).
3. Gérer l’exception relative à la contrainte d’intégrité référentielle qui
interdit la suppression de tout département qui contient des employés.

Conseil: Utiliser PRAGMA EXCEPTION_INIT pour attribuer un nom


à votre exception qui porte le numéro ORA- 2292
TP
PROCEDURES ET FONCTIONS STOCKEES

On se place toujours au niveau du schéma Oracle : « HR »

Procédures stockées

1. Ecrire une procédure stockée « supprimer_employe » permettant de supprimer un


employé dont on spécifie le numéro.

a. Exécuter la procédure dans l’environnement SQLPlus avec numero=101.


b. Vérifier la suppression en utilisant l’ordre SQL SELECT correspondant.

2. Ecrire une procédure stockée « Comm_employe » permettant d’identifier la


commission d’un employé dont le numéro est introduit par l’utilisateur.

-Si la commission est nulle alors le message « commission est nulle » est affiché.
-Si non majorer la commission de l’employé par un taux introduit par l’utilisateur. La
commission est affichée avant et après la mise à jour.

a. Exécuter la procédure dans l’environnement SQLPlus avec les paramètres


effectifs : (noemployé=’100’, txcomm=1.1) et avec ('102', 1.2).

b. Vérifier la mise à jour en utilisant l’ordre SQL SELECT correspondant.

3. Afficher le code source de la procédure « supprimer_employe » créée en 1. Utiliser la


vue USER_SOURCE (NAME, TYPE, LINE, TEXT).
4. Afficher la liste des objets de l’utilisateur en cours utiliser la vue USER_OBJECTS
5. Afficher toutes les tables de l’utilisateur en cours
6. Afficher la liste des procédures stockées par l’utilisateur en cours.
7. Afficher la liste des procédures stockées par tous les utilisateurs.

8. Créer une procédure stockées qui permet d’afficher les noms des n premiers employés
d’un département donné. Gérer le cas où n est supérieur au nombre des employés du
département.

9. Créer une procédure stockée qui permet de copier le contenu d’une table dans une
nouvelle vue. Le nom de la nouvelle vue doit correspondre à cette chaine :
« Vue_nomtable ».

10. Ecrire une procédure stockée «dep_nbremp » qui récupère le nombre d’employés
qu’un département donné contient dans un paramètre de sortie outnbremp de type
Number.
a- Déclarer une variable cptemp de type Number dans l’environnement SQLPLus
b- afficher ensuite la valeur du paramètre de sortie par le biais du cptemp.
Fonction stockées

1. Ecrire une fonction stockée «max_sal_job » permettant de calculer le maximum des


salaires des employés dont le job est introduit par l’utilisateur.

a- Déclarer une variable max_sal de type NUMBER dans l’environnement


SQLPlus.
b- Exécuter cette fonction dans l’environnement SQLPlus avec job = 'SALE_MAN'.
Et afficher ensuite le contenu max_sal.
2. Ecrire une fonction stockée «dep_nbremp » qui retourne le nombre d’employés qu’un
département donné contient.
a- Déclarer une variable cptemp de type INTEGER dans l’environnement SQLPLus
b- Exécuter cette fonction dans l’environnement SQLPlus avec numéro de
département = 90. Et afficher ensuite le contenu de cptemp.

3- Afficher la liste des fonctions stockées créées par tous les utilisateurs.
4- Afficher la liste des fonctions stockées par l’utilisateur en cours

5. Écrire une fonction qui permet d’insérer un enregistrement dans la table employés et
qui retourne le numéro d’employé inséré. l’insertion utilise une séquence.
TP sur les triggers

Exercice 1 :
Créer un trigger « employe_insert » qui permet de vérifier si le salaire d’un employé est
<5000. Si le cas se présente, il insère automatiquement 5000.

Exercice 2 :
Créer un trigger « employé_embauche» qui permet de vérifier, lors de l’insertion d’un
employé, si la date d’embauche est inférieure à la date système, dans le cas échéant, afficher
un message d’erreur «La date d’embauche est supérieure à la date système».
Insérer dans la base l’enregistrement suivant pour vérifier votre solution.

Exercice 3 :
Écrire un trigger qui permet de contrôler les ajouts et les modifications des salaires. Si le JOB
n’est pas ‘PRESIDENT’, alors Lors de l’ajout, modification d’un nouvel employé, nous
devons vérifier si le salaire de celui-ci se retrouve dans la fourchette des salaires. Les salaires
sont en fonction de JOB et sont dans la table Grille.

Exercice 4 :
Pour archiver l’historique des opérations de mise à jour de la table Employees, on a crée une
table History (employee_id, operation_date, operation_type). Ecrire un trigger permettant,
après l’exécution de chaque opération sur Employees, d’ajouter un tuple concernant cette
opération à la table History.

Exercice 5 :
Soit le schéma relationnel suivant :
ETUDIANT (numEtud, nom, prenom , datenaiss, civilite, numsecu);
MODULE (codMod, nomMod, effecMax);
EXAMEN (codMod#, codExam, dateExam);
INSCRIPTION (numEtud#, codMod#, dateInsc);
PREREQUIS (codMod#, codModPrereq, noteMin);
RESULTAT (codMod#, codExam#, numEtud#, note)

A) Créer la base de données qui correspond au schéma relationnel ci-dessus tout en prenant en
considération les contraintes décrites dans le tableau suivant :

Colonne Contrainte
numsec non nul
effecMax valeur par défaut 30
dateInsc valeur par défaut est la date système
noteMin non nul
Civilite appartient à cette liste ('Mr', 'Mme', 'Mlle')

B) Créer les triggers qui permettent de répondre à ces règles de gestion


1. Il ne doit pas être possible de modifier la note min dans la table prerequis.
2. Dans un module, il ne doit pas y avoir plus de effecMax élèves inscrits.
3. On ne peut créer un examen pour un module que s’il y a des élèves inscrits dans ce
module.
4. Un élève ne peut passer un examen que si sa date d’inscription est antérieure à la date
de l’examen.
5. Un élève s’inscrivant à un module doit avoir eu au moins la note min à tous les
modules pré-requis.
6. Créer une vue de résultats, qui contiendra le nom et la moyenne de chaque étudiant s’il
a passé les examens de tous les modules dans lesquels il est inscrit.
7. Revenez sur la première contrainte : il ne doit être possible de modifier une note min
dans la table prerequis que s’il n’existe pas d’élève dont une inscription serait
invalidée.
8. Il ne doit être possible de modifier effecMax que si des étudiants ne se retrouvent pas
avec une inscription invalidée.

Vous aimerez peut-être aussi