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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
UPDATE Creneau
 SET TENS='TDM'
 WHERE idCren=1;
Et j'obtiens alors le message suivant

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 è_é