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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ??