salut,
j'ai l'exercice suivant:
matiere(code_matiere,designation,coeff)
etudiant(ncin,nom)
epreuve(code_matiere,ncin,date_epreuve,note)
ecrire un bloc pl/sql qui permet d'avoir pour chaque etudiant un releve de notes (la moyenne 1 matiere comporte plusieurs epreuves)
releve de notes :
ncin..........nom..............
designation..................moyenne..............
moyenne generale............
recapitulatif :
moyenne la plus basse............
moyenne la plus eleve.............
j'ai écrit le bloc pl/sql suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| declare
cursor c1 is select * from etudiant ;
cursor c2(wcodemat matiere.code_matiere%type) is select code_matiere, designation from matiere where code_matiere= wcodemat ;
cursor c3(wcin etudiant.ncin%type) is select code_matiere, sum(note)/nvl(count(*),1) from epreuve where ncin = wcin group by code_matiere;
-- declaration variables
cpt etudiant%rowtype;
cpt3 matiere%rowtype;
cpt2 epreuve%rowtype;
wmat matiere.code_matiere%type;
wmati matiere.code_matiere%type;
wcoeff number;
moyge number(4,2) :=0 ;
scoeff number := 0 ;
maxi number(4,2);
mini number(4,2);
moy number(4,2);
begin
--set serveroutput on ;
open c1 ;
for cpt in c1 loop
dbms_output.put_line('CIN :'||cpt.ncin||' nom :'||cpt.nom);
open c3(cpt.ncin);
loop
fetch c3 into wmati,moy ;
open c2(wmati);
fetch c2 into wmat,wcoeff ;
dbms_output.put_line(wmat||' Moyenne :'||moy);
moyge := moyge + moy ;
scoeff := scoeff + wcoeff ;
end loop ;
dbms_output.put_line('la moyenne generale :'||moyge/nvl(scoeff,1));
close c2 ;
close c3;
if moyge/scoeff > maxi then maxi := moyge / scoeff ; end if ;
if moyge/scoeff < mini then mini := moyge / scoeff ; end if ;
end loop ;
close c1;
end;
/ |
et j'ai cette erreur :
ERREUR à la ligne 1:
ORA-06511: PL/SQL: curseur déjà ouvert
ORA-06512: à ligne 2
ORA-06512: à ligne 20
j'ai deja essaye avec ce code avant l'ouverture de c1:
if c1%isopen then close c1 ; end if ;
mais isopen est un attribut inconnu (pourtant je l'ai dans mon cours) !!!
pouvez vous m'aider ??
Partager