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'
Partager