Voila j'ai réalisé un trigger, mais lorsque je le teste et que j'essaie de modifier ou d'insérer un ligne dans ma table, j'ai un problème de table mutante que je n'arrive pas à résoudre.

Merci d'avance pour vos conseils avisés.

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
 
create or replace trigger Charge_ens
after insert or update of duree on creneau
for each row
declare
charge number;
begin
select max(sum(duree)) into charge from creneau
group by noens;
if charge > 20 then
P_DEFICIT (:new.NOCLASSE, :new.NOMAT, :new.NOENS, :new.DUREE);
insert into TEMP_CRENEAU values (:new.NOCREN);
end if;
end;
/
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
 
create or replace procedure P_DEFICIT (v_noclasse in NUMBER, v_nomat in NUMBER, v_noens in NUMBER, v_duree in NUMBER) is
nbdef NUMBER;
dureemaj NUMBER;
begin
select count(*) into nbdef
from DEFICIT
where v_noclasse=noclasse
and v_nomat=nomat
and v_noens=noens;
if nbdef<>0 then
select nb_heures_total into dureemaj
from DEFICIT
where v_noclasse=noclasse
and v_nomat=nomat
and v_noens=noens;
dureemaj:=dureemaj+v_duree;
update DEFICIT
set nb_heures_total=dureemaj
where v_noclasse=noclasse
and v_nomat=nomat
and v_noens=noens;
else
insert into DEFICIT values (v_noclasse, v_nomat, v_noens, v_duree);
end if;
end;
/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
update creneau set duree = 4 where nocren = 6;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
update creneau set duree = 4 where nocren = 6
*
 
ERROR at line 1:
ORA-04091: table M1SID44.CRENEAU is mutating, trigger/function may not see it
ORA-06512: at "M1SID44.CHARGE_ENS", line 4
ORA-04088: error during execution of trigger 'M1SID44.CHARGE_ENS'