Académique Documents
Professionnel Documents
Culture Documents
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.
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.
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 ;
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)
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".
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) ;
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
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