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é...
Bon, le code sera surement plus clair que moi :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;
L'erreur est :
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;
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'
Partager