Message posté par : Benjamin B
----------------------------------------
Bonjour,
en Fait j'essaie de copier un enregistrement dans une seconde table si la date
n'est pas null ( ou valeur spécifique d'un champs),
Mon premier trigger me le fait trés bien .
-----------------
Code :
create or replace TRIGGER "SIR_ARBRE_V2_COPIE" after update ON
SIR.SIR_ARBRE_ENTRETIEN_FUTUR FOR EACH ROW
declare
ii number(10):= 0;
cd number(10):= 0;
te varchar2(250):= '';
de DATE:='';
ida number(10) :=0;
um varchar2(200);
nae number(10);
ent varchar2(250);
etat varchar2(250);
ct number(10);
ctm number(10);
begin
ii := :new.ID_ARBRE_ENTRETIEN_FUTUR;
ida := :new.ID_ARBRE_ALIGNEMENT_GLD;
cd := :new.CODE_ENTRETIEN_FUTUR;
te := :new.TYPE_FUTUR_ENTRETIEN;
de := :new.DATE_ENTRETIEN;
um := :new.UTILISATEUR_MODIF;
nae := :new.NOMBRE_ARBRE_ENTRETIEN;
ent := :new.ENTREPRENEUR;
etat := :new.ETAT_TABLE;
select count(*) into ct from SIR_ARBRE_ENTRETIEN_FAIT where ANCIEN_ID_ENT_FUT = ii;
If de is not null and ct = 0 then
insert into SIR_ARBRE_ENTRETIEN_FAIT
(ID_ARBRE_ENTRETIEN_FAIT,CODE_ENTRETIEN_FAIT,TYPE_ENTRETIEN,ANCIEN_ID_ENT_FUT,UTILISATEUR_MODIF,NOMBRE_ARBRE_ENTRETIEN,DATE_ENTRETIEN,ENTREPRENEUR)
SELECT max(ID_ARBRE_ENTRETIEN_FAIT)+1,cd,te,ii,um,nae,de,ent
from SIR.SIR_ARBRE_ENTRETIEN_FAIT ;
end if;
end;
-----------------
jusque là pas de soucis. OUFFF çà çà marche.
Mais j'ai un deuxieme trigger qui après un nouvel insert dans ma table 2 vérifie si la
donnée existe dans la première table et si oui alors m'efface ma donné de ma première
table .
et là Bing table en cours de mutation...
alors que je suis en after update sur le premier trigger et en after insert sur le
deuxieme trigger.
Je suis pourtant sur deux trigger différents, l'un après l'autre, donc deux
transactions différentes, non ?
-----------------
Code :
create or replace TRIGGER SIR_ARBRE_V2_ENT_FAIT_UP3
after insert ON SIR.SIR_ARBRE_ENTRETIEN_FAIT FOR EACH ROW
declare
ii number(10):= 0;
ctm number(10);
begin
ii := :new.ANCIEN_ID_ENT_FUT ;
select count(*) into ctm from SIR_ARBRE_ENTRETIEN_FUTUR where ID_ARBRE_ENTRETIEN_FUTUR =
ii ;
if ctm >0 THEN delete SIR_ARBRE_ENTRETIEN_FUTUR where ID_ARBRE_ENTRETIEN_FUTUR = ii ;
end if;
end;
-----------------
J'ai l'impression que mon deuxieme trigger essaie de passer avant mon premiere
trigger???
-----------------
Code :
Erreur lors de l'enregistrement des modifications de la table
"SIR"."SIR_ARBRE_ENTRETIEN_FUTUR" :
Ligne 2 : ORA-04091: la table SIR.SIR_ARBRE_ENTRETIEN_FUTUR est en mutation ; le
déclencheur ou la fonction ne peut la voir
ORA-06512: à "SIR.SIR_ARBRE_V2_ENT_FAIT_UP3", ligne 11
ORA-04088: erreur lors d'exécution du déclencheur
'SIR.SIR_ARBRE_V2_ENT_FAIT_UP3'
ORA-06512: à "SIR.SIR_ARBRE_V2_COPIE", ligne 32
ORA-04088: erreur lors d'exécution du déclencheur 'SIR.SIR_ARBRE_V2_COPIE'
-----------------
Je tourne en rond j'ai l'impression....
Sinon faudrait que dans un seul trigger, mon premier trigger si date non null, alors copie
dans table 2 ET delete enregistrement en cours de la table 1. mais idem table en
mutation....
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=354202#p354202
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net