Vous êtes sur la page 1sur 2

Université Sultan Moulay Slimane

Ecole National des Sciences Appliquées


Khouribga

- Entrepôts et Bases de Données Relationnelles -


Examen 1 : PL/SQL

Exercice 1 : (4 points)
Soit une table quelconque dans votre schéma, dont la clé primaire est numérique.
1. Définir un déclencheur en insertion permettant d’implémenter une
numérotation automatique de la clé. Le premier numéro doit être 1.
2. Ajouter une ligne dans la table pour tester le bon fonctionnement du déclencheur.

Exercice 2 : (6 points)
Soit la table client ci-dessous extraite d’un schéma relationnel d’une agence bancaire
régionale : ClientBank(id_client, nom, ville, #id_conjoint)
où l’attribut id_conjoint est l’identifiant du conjoint du client courant id_client (ils sont
définies sur le même domaine).
1. Créer la table ClientBank dans votre schéma.
2. Ecrire un déclencheur avant insertion ou modification permettant de contrôler les
contraintes suivantes :
- Empêcher l’insertion et/ou la modification si :
o Le nom du conjoint est différent de celui du client,
o Le client n’habite pas dans Casa, Rabat ou Tanger.
- Notifier l’utilisateur si le client n’as pas de conjoint.
3. Insérer et modifier quelques n-uplets dans la table ClientBank pour tester les
différents cas d’utilisations de ce déclencheur.

Remarque : Lors de la création d'un trigger pour faire une modification sur la même
table, Oracle sort une erreur sur la table en mutation. Pour la contourner, il faut une
transaction autonome: CREATE OR REPLACE TRIGGER triggerTable

DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN

COMMIT; -- un commit est obligatoire
END triggerTable;

Examen PL/SQL 1 Pr. Nassima SOUSSI


Université Sultan Moulay Slimane
Ecole National des Sciences Appliquées
Khouribga

Exercice 3 : (4 points)
Une entreprise souhaite connaître la différence de quantité moyenne entre les commandes
successivement enregistrées dans une table de commandes (QtyCommande) qui est
réduite à l’unique attribut QTY en raison de simplification. Cette table est remplie de
commandes valorisées (ie. pour lesquelles l’attribut quantité QTY n’est pas NULL) ou
non. Les commandes non valorisées ne sont pas à prendre en compte.
1. Créer la table QtyCommande(QTY). La remplir successivement avec les valeurs
suivantes: 5, NULL, 10, 8, 9, 13.
2. Écrire un programme PL/SQL qui affiche la différence de quantité moyenne entre
les commandes.
3. Créer et gérer l’exception qui va interrompre le programme immédiatement si la
table QtyCommande contient moins de deux commandes valorisées.
Exemple :

Résultat attendu = ( |10-5| + |8-10| + |9-8| + |13-9|) / 4 = 3

RQ : la fonction de valeur absolue en PL/SQL est : ABS(…)

Exercice 4 : (6 points)
Soit le package de gestion des employés du TP2 crée sur la table EMPLOYEES définie
comme suit : EMPLOYEES (matr, nom, prenom, ville, age, dpt_num, salaire)
1. Ajouter les éléments suivants à ce package :
a. Une procédure d'augmentation du salaire pour un employé. La procédure
comporte deux arguments : le numéro de l’employé et le montant de
l’augmentation. Si le montant est égal à zéro l’employé se voit attribuer la
moyenne des salaires ; et si le montant est supérieur ou égale au vrai salaire
de l’employé, une exception sera levée.
b. Un type structuré nommé record_dept sous la forme d’un enregistrement
privé, constitué de deux champs : moy_age et moy_salaire.
c. Une fonction qui retourne un enregistrement de type record_dept après avoir
calculer la moyenne des salaires et âges des employées d’un département
donné en argument de la fonction.
2. Créer un bloc PL/SQL pour tester le bon fonctionnement des sous programmes
précédents.

Examen PL/SQL 2 Pr. Nassima SOUSSI

Vous aimerez peut-être aussi