Désidément bc de pb aujourd'hui ... mais j'apprends bcp.

Encore un pb avec mes triggers ; la récursivité.

Mon problème concerne la duplication d'un enregistrement via un trigger.

Un article est dédié à ce sujet dans le oracle book d'oracle press (Oracle 8i) mais dans l'exemple cité la duplication se fait sur une base distante via Dblink dans mon cas la duplication est partiel (pas de pb de ce coté la) mais dans la même table. Existe t il une solution pour evité une execution récursive du trigger.

voila mes triggers ::


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
CREATE OR REPLACE TRIGGER TRIG_BRANCARD
BEFORE INSERT ON BRANCARD 
FOR EACH ROW 
DECLARE
	ROW1 INT;
BEGIN 
	SELECT SEQ_BRANCARD.NEXTVAL INTO ROW1 FROM DUAL ;
	:NEW.NO_BRANC:=ROW1;
END;
/
 
-- Trigger preparent le retour....
CREATE OR REPLACE TRIGGER TRIG_BRANCARD_PREPRETOUR
BEFORE INSERT ON BRANCARD 
FOR EACH ROW 
DECLARE
	R1 INT;
BEGIN 
	SELECT SEQ_BRANCARD.NEXTVAL INTO R1 FROM DUAL ;	
	INSERT INTO BRANCARD 
	(NO_HOP,NO_BRANC,TY_BRANC,DT_TRANS,ID_PATIENT,MD_TRANS) 
	VALUES 
	(:new.NO_HOP,R1,'R',:new.DT_TRANS,:new.ID_PATIENT,:new.MD_TRANS) ;
END;
/
voila l'erreur

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
ERROR at line 1:
ORA-00036: maximum number of recursive SQL levels (50) exceeded
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 5
ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD'
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8
ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD'
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8
ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD'
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8
ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD'
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8
ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD'
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8
ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD'
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8
ORA-04088: error during execution of trigger 'OPS$BRANCARD.TRIG_BRANCARD'
ORA-06512: at "OPS$BRANCARD.TRIG_BRANCARD", line 8
ORA-04088: error during execution


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
 
CREATE OR REPLACE TRIGGER TRIG_BRANCARD
BEFORE INSERT ON BRANCARD 
FOR EACH ROW 
DECLARE
	ROW1 INT;
	R1 INT;	
BEGIN 
	SELECT SEQ_BRANCARD.NEXTVAL INTO ROW1 FROM DUAL ;
	:NEW.NO_BRANC:=ROW1;
	SELECT SEQ_BRANCARD.NEXTVAL INTO R1 FROM DUAL ;	
	INSERT INTO BRANCARD 
	(NO_HOP,NO_BRANC,TY_BRANC,DT_TRANS,ID_PATIENT,MD_TRANS) 
	VALUES 
	(:new.NO_HOP,R1,'R',:new.DT_TRANS,:new.ID_PATIENT,:new.MD_TRANS) ;
END;
/
voila l'erreur

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Warning: Entry/Exit code is optimized.  Cannot restore context (UNWIND 22)
ORA-03113: end-of-file on communication channel
une idée...

merci d'avance && merci pour votre grande réactivité constatée lors de mes précédents posts