Salutation;
j'ai crée un déclencheur, celui ci se crée bien sans erreurs de compilation (je sais pas si on peut vraiment dire compilation pour du pl/sql) ^^
Du coup après j'ai voulu tester mon déclencheur en faisant une modification.
Et j'obtiens alors le message suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 UPDATE Creneau SET TENS='TDM' WHERE idCren=1;
UPDATE Creneau
*
ERREUR à la ligne 1 :
ORA-04091: la table CRENEAU est en mutation ; le déclencheur ou la fonction ne peut la voir
ORA-06512: à "VERIFFIRSTENSEIGN", ligne 2
ORA-04088: erreur lors d'exécution du déclencheur 'VERIFFIRSTENSEIGN'
Voici le code de mon déclencheur plus en détail; le but étant d'empêcher que le premier créneau d'un cours soit un TDM
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 create or replace TRIGGER VERIFFIRSTENSEIGN BEFORE INSERT OR UPDATE ON Creneau for each ROW BEGIN for c1_ligne in (select * from Creneau where DateC=(select min(DateC) from creneau) and HDEB=(select min(HDEB) from creneau) and IdCren=(select min(IdCren) from creneau) and IdMat=:NEW.IdMat and IdGrp=:NEW.IdGrp) loop if(c1_ligne.IdCren=:NEW.IdCren) then DBMS_OUTPUT.PUT_LINE('Modification premier creneau' ||c1_ligne.IdCren); if(:NEW.TENS='TDM') then RAISE_APPLICATION_ERROR ( -20010, 'Creneau invalide' ) ; end if; end if; if(:NEW.DateC <= c1_ligne.DateC) then if(:NEW.HDEB <= c1_ligne.HDEB) then if(:NEW.TENS='TDM') then RAISE_APPLICATION_ERROR ( -20010, 'Creneau invalide' ) ; end if; end if; end if; end loop; END; /
Si j'en crois mon message d'erreur il me dit qu'il ne peut pas voir creneau parce qu'il est en mutation...je suis bien d'accord mais je croyais que faire un déclencheur le permettrait de contourner ce problème de mutation è_é
Partager