Vous êtes sur la page 1sur 2

Année Universitaire 2019-2020

ISI
IN S T I TUT
SUPERIEUR 2ème année SI - 2ème année SIL
INFORMATIQUE
Système de Gestion de Bases de données – Activité 4.1
‫ الـمعهـد العـالـي لإلعـالمــيـة‬R. ZAAFRANI, 13/04/2020

Correction de l'activité 5.1


1) -- RESULTAT
create table resultat(
nume number(2),
nom char(20),
codemat number(2),
moy_matière number(5,2));

-- CLASSEMENT
create table classement(
nume number(2),
nom char(20),
moyenne number(5,2),
rang number(2));

2) -- Edition des résultats et classement des étudiants (bloc PL/SQL)

DECLARE

-- Calcul de la moyenne par matière


CURSOR etudiant_note IS
SELECT ETUDIANT.nume, nom, MATIERE.codemat,
((notecc * coefcc) + (notexam *coefexam)) / (coefcc + coefexam) AS moy_matière
FROM ETUDIANT, NOTATION, MATIERE
WHERE ETUDIANT.nume = NOTATION.nume
AND NOTATION.codemat = MATIERE.codemat;

nbe INTEGER; -- Nombre d'etudiants a classer


rg INTEGER; -- Place dans le classement general
moy NUMBER(5,2); -- Moyenne generale d'un etudiant
aucun_etudiant EXCEPTION;

-- Calcul de la moyenne générale


-- Le tri permet de faciliter le traitement ultérieur du classement.
CURSOR etudiant_classe IS
SELECT nume, nom, AVG(moy_matière) moyenne
FROM RESULTAT
GROUP BY nume, nom
ORDER BY moyenne DESC;

BEGIN

-- Destruction des données éventuelles des années précédentes


DELETE FROM RESULTAT;
DELETE FROM CLASSEMENT;
-- Test de l'existance de n-uplets dans la relation ETUDIANT
SELECT COUNT(*) INTO nbe FROM ETUDIANT;
IF nbe=0 THEN
Système de Gestion de Bases de données – Activité 5.1 1
RAISE aucun_etudiant;
END IF;

-- Insertion des étudiants notes comme n-uplets dans RESULTAT


FOR et IN etudiant_note LOOP
INSERT INTO RESULTAT VALUES (et.nume, et.nom, et.codemat, et.moy_matière);
END LOOP;

-- Initialisation des variables locales


moy:=21;
rg:=0;
-- Insertion des n-uplets dans la relation CLASSEMENT
FOR ec IN etudiant_classe LOOP
IF moy>ec.moyenne THEN
rg:=rg + 1;
END IF;
INSERT INTO CLASSEMENT VALUES (ec.nume, ec.nom, ec.moyenne, rg);
moy:=ec.moyenne;
END LOOP;

-- Validation de la transaction
COMMIT;

EXCEPTION
WHEN aucun_etudiant THEN
INSERT INTO RESULTAT VALUES(0, 'Aucun etudiant', NULL, NULL);
END;

Système de Gestion de Bases de données – Activité 5.1 2