Salut tout le monde,

Voila, je code en java et pour mon appli, j'ai du faire un trigger. Je suis pas très famillière du SQL, à part quelques bases, je n'y connais pas grand chose. Mon trigger compile mais il ne veut pas s'executer. J'ai vérifier la syntaxe et ça m'a l'air correct.
La seule chose qui me vient à l'idée, c'est que dans mon trigger je fais un select dans la table en testant le champs qui a été modifié, mais pas pour l'enregistrement modifié...

select nvl(n_num_typ_avancement,0) into avBis from t_zee_prospection where n_num_zee = :new.n_num_zee and n_num_prospection <> :new.n_num_prospection and n_num_typ_avancement<>13;
Bon, le code sera surement plus clair que moi :
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
CREATE OR REPLACE TRIGGER majEtatZEe
AFTER UPDATE OF n_num_typ_avancement ON t_zee_prospection
FOR EACH ROW
DECLARE
	-- etat de l'autre couple pn / zee que celui qui a ete modifie
	avBis t_zee_prospection.n_num_typ_avancement%TYPE;
	-- etat global de la zone
	avZEe t_zee.n_num_typ_avancement%TYPE;
BEGIN
	-- recuperation des etats en base (initialisation des variables)
	select nvl(n_num_typ_avancement,0) into avBis from t_zee_prospection where n_num_zee = :new.n_num_zee and n_num_prospection <> :new.n_num_prospection and n_num_typ_avancement<>13;
	select n_num_typ_avancement into avZEe from t_zee where n_num_zee = :new.n_num_zee;
 
	-- si la zone ne fait l'objet que d'un renvoi
	IF (avBis = 0) THEN
		IF (:new.n_num_typ_avancement = 13) THEN
			update t_zee set t_zee.n_num_typ_avancement = 1;
		ELSE
			update t_zee set t_zee.n_num_typ_avancement = :new.n_num_typ_avancement;
		END IF;
 
	-- s'il y a eu deux envois, et donc deux couples pn / zee
	ELSE
		-- si le nouvel etat est "validee", la zone passe toujours a l'etat "validee"
		IF (:new.n_num_typ_avancement = 6) THEN
			update t_zee set t_zee.n_num_typ_avancement = 6;
		ELSE
			-- si la zone est a l'etat "validee", pas de changement d'etat possible
			IF (avZEe <> 6) THEN
				-- les seuls cas possibles de modification vers un etat 4 ou 5 sont toujours repercutes sur l'etat global de la zone
				IF ((:new.n_num_typ_avancement = 4) OR (:new.n_num_typ_avancement = 5)) THEN
					update t_zee set t_zee.n_num_typ_avancement = :new.n_num_typ_avancement;
				END IF;
				-- l'etat "TBA" sera global si la zone n'est ni "classée" ni "faite"
				IF ((:new.n_num_typ_avancement = 9) AND (avZEe <> 4) AND (avZEe <> 5)) THEN
					update t_zee set t_zee.n_num_typ_avancement = :new.n_num_typ_avancement;
				END IF;
 
				IF (:new.n_num_typ_avancement = 10) THEN
					IF (avZEe = 10) THEN
						update t_zee set t_zee.n_num_typ_avancement = 11;
					ELSE
						IF (avZEe = 12) AND (avBis = 13) THEN
							update t_zee set t_zee.n_num_typ_avancement = 1;
						END IF;
					END IF;
				END IF;
				IF (:new.n_num_typ_avancement = 12) THEN
					IF (avZEe = 2) THEN
						IF (avBis <> 2) THEN
							update t_zee set t_zee.n_num_typ_avancement = 12;
						END IF;
					END IF;
				END IF;
				IF (:new.n_num_typ_avancement = 13) THEN
					IF (avZEe = 12) THEN
						IF (avBis = 13) THEN
							update t_zee set t_zee.n_num_typ_avancement = 13;
						END IF;
					END IF;
				END IF;
			END IF;
		END IF;
	END IF;
END;
L'erreur est :
ORA-04091: table AVEDBA.T_ZEE_PROSPECTION is mutating, trigger/function may not see it
ORA-06512: at "AVEDBA.MAJETATZEE", line 8
ORA-04088: error during execution of trigger 'AVEDBA.MAJETATZEE'