Vous êtes sur la page 1sur 4

République Tunisienne

Ministère de l’Enseignement Supérieur


et de la Recherche Scientifique

Institut Supérieur des Sciences Appliquées et de Technologie de Mateur

[ ] Examen [X] Devoir surveillé – AU 2022/2023 Semestre 2


Filière Année (Niveau) Matière Enseignant(e)
ème
Maintenance des 2 Année Ingénierie des Bases
Samir BOUCETTA
Systèmes Informatiques ISI-IRS de Données
Durée 1 heure SOLUTION
Nombre de pages 2 Note sur 20
Date: 14/03/2023 – 11:30

Documents autorisés : Oui Non  Calculatrice autorisée : Oui Non 

Exercice #1: SQL (11 points: 1.5 - 1.5 – 2 – 2.5 - 2.5 - 1.0)
ETUDIANT(NumCartEtud, NomPrenom, Sexe, MoyGen, #IdDept, #IdPFE)
DEPT(CodeDept, NomDepartement, #IdDirecteur)
ENSEIGNANT(IdEns, NomEns, SexEns, Specialite, #CodeDept)
PFE(IdPFE, Sujet, AnneeUniv, #CodeDept, #IdEncadreur)

N.B.
IdDirecteur est l'identificateur de l'enseignant qui dirige le departement.
IdEncadreur est l'identificateur de l'enseignant qui encadre le PFE.
AnneeUniv est l'année universitaire. 2023 signifie l'année universitaire 2022/2023.

En considérant les relations ci-dessus, écrire les requêtes SQL suivantes:

a) Donnez la liste des NomPrenom et moyennes générales des étudiants qui ont été
affectés au PFE "IRS-013-23", triée par ordre alphabétique des NomPrenom.
"IRS-013-23" étant l'ID d'un PFE, toutes les informations requises sont disponibles dans la
table ETUDIANT.

SELECT NomPrenom, MoyGen


FROM ETUDIANT
WHERE IdPFE = "IRS-013-23"
ORDER BY NomPrenom ;

b) Donnez l'année universitaire et le nombre total de PFE encadrés dans chaque année.
SELECT AnneeUniv, COUNT(IdPFE)
FROM PFE
GROUP BY AnneeUniv ;
1|Page
c) Le NomPrenom de l'étudiant ayant la plus grande moyenne générale au cours de
l'année universitaire 2021/2022, ainsi que le nom du PFE et le nom de l'encadreur.
SELECT E.NomPrenom, P.Sujet, S.NomEns, MAX(E.MoyGen)
FROM ETUDIANT E, PFE P, ENSEIGNANT S
WHERE E.IdPFE = P.IdPFE AND S.IdEns = P.IdEncadreur
AND P.AnneeUniv = 2022 ;

d) Donnez la liste des NomPrenom des directeurs de départements et le nombre de


PFE qu'ils encadrent au cours de l'année universitaire 2022/2023.

SELECT E.NomEns, COUNT(P.IdPFE)


FROM ENSEIGNANT E, DEPT D, PFE P
WHERE E.IdEns = D.IdDirecteur AND E.IdEns = P.IdEncadreur
AND P.AnneeUniv = 2023
GROUP BY E.NomEns;

e) Donnez la liste des noms de sujets de PFE et le nombre d'étudiants participant dans
ces PFE pour les PFE menés en groupes.
N.B. les PFE menés en groupes sont les PFE qui sont menés par deux étudiants ou plus.
SELECT P.Sujet, COUNT(E.NumCartEtud)
FROM PFE P, ETUDIANT E
WHERE P.IdPFE = E.IdPFE
GROUP BY P.Sujet
HAVING COUNT(E.NumCartEtud)>1 ;

f) Réécrire la requête précédente pour trier le résultat par ordre décroissant du nombre
d'étudiants participant dans le PFE.
SELECT P.Sujet, COUNT(E.NumCartEtud)
FROM PFE P, ETUDIANT E
WHERE P.IdPFE = E.IdPFE
GROUP BY P.Sujet
HAVING COUNT(E.NumCartEtud)>1
ORDER BY COUNT(E.NumCartEtud) DESC ;

2|Page
Exercice #2: PL/SQL (9 points: 0.5 – 1 – 1.5 – 2 – 3 - 1)

ETUDIANT(NumCartEtud, NomPrenom, Sexe, MoyGen, #IdDept, #IdPFE)


DEPT(CodeDept, NomDepartement, #IdDirecteur)
ENSEIGNANT(IdEns, NomEns, SexEns, Specialite, #CodeDept)
PFE(IdPFE, Sujet, AnneeUniv, #CodeDept, #IdEncadreur)

En considérant les relations de l’exercice précédent (rappelées ci-dessus), répondre aux


questions suivantes:

1) Déclarez une variable tPFE ayant le même type qu'un tuple de la relation PFE.

tPFE PFE%ROWTYPE ;

2) Déclarez une variable vMoyGen ayant le même type que l'attribut MoyGen et
l'initialiser par la valeur 10.

tMoyGen ETUDIANT.MoyGen%TYPE := 10 ;

3) Ecrire un code PL/SQL qui stocke, dans la variable vMoyGen, la plus faible moyenne
générale dans le département "ELC".

SELECT MIN(MoyGen) INTO vMoyGen


FROM ETUDIANT
WHERE IdDept = "ELC" ;

4) Ecrire un code PL/SQL qui calcule et affiche les indices et valeurs des 10 premiers
éléments de la suite définie par : S0 = 1, Sn = 2*(Sn-1 + 2).
S := 1 ;
DBMS_OUTPUT.PUT_LINE("Indice 0 – Valeur=", S) ;

FOR i in 1..9 LOOP


S := 2 * (S + 2) ;
DBMS_OUTPUT.PUT_LINE("Indice ", i, " - Valeur=", S) ;
END LOOP;

3|Page
5) Exécutez le code PL/SQL suivant, et indiquez l'état de l'écran après l'exécution.
DECLARE
Var1, Var2 int ;
PROCEDURE Devine(V1 IN int :=1, V2 INOUT int) IS
BEGIN
V1 := V2 – V1 ; V2:= (V2 – V1)*2 ;
DBMS_OUTPUT.PUT_LINE("Dedant: ", V1, "--", V2);
End Devine;
BEGIN
Var1:=15; Var2:=20 ;
DBMS_OUTPUT.PUT_LINE("Avant: ", Var1, "---", Var2) ;
Devine(Var1, Var2);
DBMS_OUTPUT.PUT_LINE("Apres: ", Var1, "---", Var2) ;
End ;

Etat de l'écran :
Avant: 15---20
Dedant: 5–-30
Apres 15---30

6) Quelle est la différence entre le mode de passage de paramètres OUT et INOUT.

Un paramètre passé en mode OUT signifie qu'il est destiné à contenir un résultat
retourné par le sous-programme (procédure ou fonction).

Un paramètre passé en mode INOUT signifie qu'il est destiné à contenir une valeur qui
sera passée au sous-programme (il en a besoin pour effectuer son travail) et destiné
aussi à contenir un résultat retourné par le sous-programme (procédure ou fonction) à la
fin de l'exécution.

Bon travail

4|Page

Vous aimerez peut-être aussi